具有同步属性的类

时间:2018-04-15 21:02:19

标签: python

我正在尝试创建2个类,其实例将具有同步属性,指向彼此。

例如,给定2个类ItemQueue

class Item(object):
    def __init__(self, id, question, answer, queue=None):
        self.id = id

        self.question = question
        self.answer = answer

        self.queue = queue

class Queue(object):
    def __init__(self, name):
        self.name = name
        self.list = []

我想确保item.queue内有item list

这是我的尝试:

class Item(object):
    def __init__(self, id, question, answer, queue=None):
        self.id = id

        self.question = question
        self.answer = answer

        self.queue = None
        self.move_to(queue)

    def move_to(self, queue):
        if self.queue == queue:
            return

        if self.queue:
            self.queue.remove(self)

        self.queue = queue

        if self.queue:
            self.queue.add(self)

class Queue(object):
    def __init__(self, name):
        self.name = name
        self.list = []

    def add(self, item):
        if item not in self.list:
            self.list.append(item)
            item.move_to(self)

    def remove(self, item):
        if item in self.list:
            self.list.remove(item)
            item.move_to(None)

但我对此解决方案感到不安。当我拨打item.move_to时,系统会调用queue.add,然后又会再次呼叫item.move_to,只会返回,因为它已设置queue

这是pythonic,还是有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

为什么项目关心它在哪个队列?更重要的是,为什么一个项目负责它在队列之间的移动?为什么不这样做:

class Queue(object):
  def move_item_to_other_queue(self, item, other):
    if item in self.list:
      self.list.remove(item)
      other.list.append(item)