【发布时间】:2019-09-29 08:07:25
【问题描述】:
我正在尝试处理对 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 .. 导入符号和延迟导入
/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。
【问题讨论】:
-
使用
import ...还是from ... import ...无关紧要;两者都必须导入模块,而后者只是替换了导入后对a = module.a之类的赋值的需要。究竟什么“不起作用”? -
我收到“ImportError: cannot import name 'A' from 'module_a.class_a'”或“AttributeError: module 'module_a.class_a' has no attribute 'A'
-
将
import语句放在类中(以任何一种形式)都不会推迟它们。它们在执行class定义时发生。
标签: python python-import circular-dependency