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

时间:2012-08-13 16:45:16

标签: python

  

可能重复:
  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吗?或某种前瞻性声明。

1 个答案:

答案 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字典中的查找)不会发生。