可能重复:
Python mutually dependent classes (circular dependencies)
我在同一模块/文件中有2个类,它们彼此使用。
class ClassA:
x = ClassB()
class ClassB:
x = ClassA()
ClassA会出现问题,因为ClassB的声明是在ClassA之后,因此找不到ClassB。
我该如何解决这个问题?我可以以某种方式导入ClassB吗?
更新:我的不好。上面的例子有一个循环引用,令许多人反感。让我再试一次:
class ClassA:
x = 1
y = ClassB.x
class ClassB:
x = 2
y = ClassA.x
我可以在ClassA实现之前以某种方式导入ClassB吗?或某种前瞻性声明。
答案 0 :(得分:5)
这有效:
class ClassA:
pass
class ClassB:
x = ClassA()
ClassA.x = ClassB()
但这真的是你想要做的吗?这样做的需要让我觉得你应该重新考虑你的设计......
当然,如果它们不需要是类属性(例如,如果实例属性工作正常,因为不是每个ClassX实例都需要共享相同的数据),您可以这样做:
class ClassA(object): #inheriting from object is always a good idea
def __init__(self):
self.x = ClassB()
class ClassB(object):
def __init__(self):
self.x = ClassA()
这是有效的,因为在实例化类之前,对象创建(以及因此在globals字典中的查找)不会发生。