我正在尝试处理对 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()
不使用 from .. 导入符号
/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()
不使用带有延迟导入的 from .. import 表示法
/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。
最佳答案
你想要做的事情在 Python 中根本无法以这种方式完成。由于类定义相互依赖于另一个类的存在,因此没有另一个类就无法成功定义任何一个类。即使在同一个文件中,这也会失败:
class A:
b = B()
class B:
a = A()
NameError: name 'B' is not defined
无论如何都会考虑循环依赖result of a bad design并且总是可以通过使用不同的类设计来避免。如果这给您带来了麻烦,请考虑提出一个关于如何重构的更具体的问题。
关于python - 提供的解决 python 循环依赖的解决方案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094125/