1
# ----- object1.py -----
from object2 import object2

class object1:
    brother = object2()

 

# ----- object2.py -----
from object1 import object1

class object2:
    sister = object1()

这应该是可行的。它不是。处理此问题的适当方法是什么?

4

2 回答 2

1

'from object2 import object2' 是一个可执行语句,并且在这一行上 object2 模块被加载到 sys.modules。而且,由于在 object2 模块中尝试了相同的操作,并且由于尚未定义 object2 类,因此它不会工作。

 //-->object2.py
 from object1 import object1
 class object2:
     pass

 //-->object1.py
 from object2 import object2
 class object1:
     pass

所以,即使上面的代码也行不通。

现在,如果您将代码修改为

 //-->object2.py
 import object1
 class object2:
     brother = object1.object1()

 //-->object1.py
 import object2
 class object1:
     sister = object2.object2()

如果我们运行 object2.py,你完成了执行顺序

  import object1 -->object2.py
  import object2 -->object1.py
  class object1:
      sister = object2.object2() //->it will give error here, as object2 module doesn't have object2 defined yet 
于 2013-08-05T21:11:55.727 回答
0

这里的问题比通常的循环导入问题要难一些。要执行定义的类语句,object1需要已经定义object2,而要执行定义的类语句,则object2需要已经定义object1。您可以解决此问题:

object1.py

class object1(object):
    pass

import object2

object1.brother = object2.object2()

object2.py

class object2(object):
    pass

import object1

object2.sister = object1.object1()

这定义了足够的object1object2在导入另一个模块之前初始化另一个类。但是,我强烈建议不要这样做。无论您使用哪种语言,循环依赖都是一个令人头疼的问题,当它们像这样巧妙地依赖于初始化顺序时,它们只会变得更糟。

文档对处理循环导入有更多建议。

于 2013-08-05T20:13:08.157 回答