# ----- object1.py -----
from object2 import object2
class object1:
brother = object2()
# ----- object2.py -----
from object1 import object1
class object2:
sister = object1()
这应该是可行的。不是。处理这个问题的合适方法是什么?
答案 0 :(得分: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
答案 1 :(得分: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()
这定义了足够的object1
或object2
来在导入其他模块之前初始化另一个类。但是,我强烈建议不要这样做。无论你使用什么语言,循环依赖都是一件令人头疼的问题,当他们巧妙地依赖于这样的初始化顺序时,它们只会变得更糟。
docs在处理循环进口方面有更多建议。