Python:如何在同一模块/文件中导入类

sam*_*ize -3 python

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

我在同一模块/文件中有2个类,它们彼此使用.

class ClassA:
    x = ClassB()

class ClassB:
    x = ClassA()
Run Code Online (Sandbox Code Playgroud)

ClassA会有问题,因为ClassB的声明是在ClassA之后,因此找不到ClassB.

我该如何解决这个问题?我能以某种方式导入ClassB吗?


更新:我的坏.上面的例子有一个循环引用,令许多人反感..让我再试一次:

class ClassA:
    x = 1
    y = ClassB.x

class ClassB:
    x = 2
    y = ClassA.x
Run Code Online (Sandbox Code Playgroud)

我可以在ClassA实现之前以某种方式导入ClassB吗?或者某种前瞻性的宣言.

mgi*_*son 5

这有效:

class ClassA:
    pass

class ClassB:
    x = ClassA()

ClassA.x = ClassB()
Run Code Online (Sandbox Code Playgroud)

但这真的是你想要做的吗?这样做的需要让我觉得你应该重新考虑你的设计......

当然,如果它们不需要是类属性(例如,如果实例属性工作正常,因为不是每个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() 
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为在实例化类之前不会发生对象创建(因此在全局字典中查找).

  • @samwize - 对不起,如果这不是你想要的,我不理解你的问题......`ClassB`有一个属性`x`,它是`ClassA`和`ClassA`的一个实例有一个属性`x`,它是`ClassB`的一个实例.这不是你在你的代码片段中尝试的内容吗? (3认同)