# ----- object1.py -----
from object2 import object2
class object1:
brother = object2()
# ----- object2.py -----
from object1 import object1
class object2:
sister = object1()
这应该是可行的。它不是。处理此问题的适当方法是什么?
# ----- object1.py -----
from object2 import object2
class object1:
brother = object2()
# ----- object2.py -----
from object1 import object1
class object2:
sister = object1()
这应该是可行的。它不是。处理此问题的适当方法是什么?
'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
这里的问题比通常的循环导入问题要难一些。要执行定义的类语句,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
在导入另一个模块之前初始化另一个类。但是,我强烈建议不要这样做。无论您使用哪种语言,循环依赖都是一个令人头疼的问题,当它们像这样巧妙地依赖于初始化顺序时,它们只会变得更糟。
文档对处理循环导入有更多建议。