我正在尝试对python进行循环依赖(是的,这是必需的,因为我需要在不同的文件和模块上分离我的模型)。
我尝试了几种方法来解决此问题(大多数已由相关问题建议),但没有一个解决了问题。 注意:当删除循环依赖项时,代码将起作用。
推迟导入
/module_a/class_a.py
from module_b.class_b import B
class A:
b = B()
/module_b/class_b.py
class B:
from module_a.class_a import A
a = A()
推迟两次进口
/module_a/class_a.py
class A:
from module_b.class_b import B
b = B()
/module_b/class_b.py
class B:
from module_a.class_a import A
a = A()
未从..导入符号中使用
/module_a/class_a.py
import module_b.class_b as mb
class A:
b = mb.B()
/module_b/class_b.py
import module_a.class_a as ma
class B:
a = ma.A()
不使用来自..导入符号的延迟导入
/module_a/class_a.py
class A:
import module_b.class_b as mb
b = mb.B()
/module_b/class_b.py
class B:
import module_a.class_a as ma
a = ma.A()
结果是所有解决方案均无效。我不知道调用是否与类定义有关,但由于我使用的是ORM,因此必须采用这种方式。
答案 0 :(得分:2)
您要尝试执行的操作根本无法在Python中以这种方式完成。由于类定义相互依赖于另一个其他类的存在,因此没有另一个就不能成功定义两个类。即使在同一文件中,也会失败:
class A:
b = B()
class B:
a = A()
NameError: name 'B' is not defined
循环依赖始终被视为result of a bad design,并且始终可以通过使用其他类设计来避免。考虑问一个更具体的问题,如果这给您带来麻烦,该如何重构。