为解决对 python 的循环依赖而提供的解决方案不起作用
Solutions provided to solve circular dependency on python doesn't work
我正在尝试使用对 python 的循环依赖(是的,这是必需的,因为我需要在不同的文件和模块上分离我的模型)。
我尝试了几种方法来解决这个问题(其中大部分已经由相关问题提出)但是 none 其中解决了问题。
注意:当删除循环依赖时,代码有效。
延迟导入
/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 .. 导入符号[=19=]
/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 notation with defer 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()
结果是 none 的解决方案有效。我不知道这是否与调用在 class 定义上这一事实有关,但它需要这样,因为我正在使用 ORM。
您尝试做的事情在 Python 中根本做不到。由于 class 定义相互依赖于 class 另一个 class 的存在,因此没有另一个 class 就无法成功定义。即使在同一个文件中,这也会失败:
class A:
b = B()
class B:
a = A()
NameError: name 'B' is not defined
循环依赖无论如何都被认为是 result of a bad design 并且总是可以通过使用不同的 class 设计来避免。如果这给您带来麻烦,请考虑提出更具体的问题,了解如何重构。
我正在尝试使用对 python 的循环依赖(是的,这是必需的,因为我需要在不同的文件和模块上分离我的模型)。
我尝试了几种方法来解决这个问题(其中大部分已经由相关问题提出)但是 none 其中解决了问题。 注意:当删除循环依赖时,代码有效。
延迟导入
/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 .. 导入符号[=19=]
/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 notation with defer 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()
结果是 none 的解决方案有效。我不知道这是否与调用在 class 定义上这一事实有关,但它需要这样,因为我正在使用 ORM。
您尝试做的事情在 Python 中根本做不到。由于 class 定义相互依赖于 class 另一个 class 的存在,因此没有另一个 class 就无法成功定义。即使在同一个文件中,这也会失败:
class A:
b = B()
class B:
a = A()
NameError: name 'B' is not defined
循环依赖无论如何都被认为是 result of a bad design 并且总是可以通过使用不同的 class 设计来避免。如果这给您带来麻烦,请考虑提出更具体的问题,了解如何重构。