-3

可能重复:
Python 相互依赖的类(循环依赖)

我在同一个模块/文件中有 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 吗?或某种前向类声明。

4

1 回答 1

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() 

这是因为对象创建(以及因此在全局字典中查找)在类被实例化之前不会发生。

于 2012-08-13T16:47:47.100 回答