在类实例之间创建循环引用?

All*_*ang 1 python

我正在尝试构建一个允许实例指向另一个类的类,但我希望这些类最终形成一个循环(例如实例A→实例B→实例C→实例A)

我试过以下,但我得到了NameError:

class CyclicClass:
    def __init__(self, name, next_item):
        self.name = name
        self.next_item = next_item

    def print_next(self):
        print(self.next_item)

item_a = CyclicClass("Item A", item_b)
item_b = CyclicClass("Item B", item_a)
Run Code Online (Sandbox Code Playgroud)

这在Python中是不合适的模式吗?如果是这样,实现这个的正确方法是什么?这似乎与以下类似,但不一样,因为类定义本身不是循环的:python类之间的循环依赖

che*_*ner 7

您需要先创建对象,然后链接它们.

item_a = CyclicClass("Item A", None)
item_b = CyclicClass("Item B", item_a)
item_a.next_item = item_b
Run Code Online (Sandbox Code Playgroud)

将第二个参数想象CyclicClass为方便,而不是链接两个对象的主要方式.您可以通过None设置默认参数值来强调这一点.

class CyclicClass:
    def __init__(self, name, next_item=None):
        self.name = name
        self.next_item = next_item

    def print_next(self):
        print(self.next_item)

item_a = CyclicClass("Item A")
# item_b = CyclicClass("Item B")
# item_b.next_item = item_a
item_b = CyclicClass("Item B", item_a)
item_a.next_item = item_b
Run Code Online (Sandbox Code Playgroud)

  • @AllenWang他们怎么样?这将如何运作?您希望解释器对于尚未定义的名称具有某种"通配符"值吗? (3认同)