为解决python上的循环依赖提供的解决方案';行不通
我正在尝试处理python上的循环依赖关系(是的,这是必要的,因为我需要在不同的文件和模块上分离模型) 我尝试了几种方法来解决这个问题(其中大多数已经通过相关问题提出),但都没有解决问题。 注意:当删除循环依赖项时,代码可以工作为解决python上的循环依赖提供的解决方案';行不通,python,python-import,circular-dependency,Python,Python Import,Circular Dependency,我正在尝试处理python上的循环依赖关系(是的,这是必要的,因为我需要在不同的文件和模块上分离模型) 我尝试了几种方法来解决这个问题(其中大多数已经通过相关问题提出),但都没有解决问题。 注意:当删除循环依赖项时,代码可以工作 延迟导入 /模块a/类a.py 从模块b.class\u b导入b A类: b=b() /模块/class_b.py B类: 从模块a.class a导入a a=a() 推迟两项进口 /模块a/类a.py A类: 从模块b类b导入b b=b() /模块/class
从模块b.class\u b导入b
A类:
b=b()
/模块/class_b.py
B类:
从模块a.class a导入a
a=a()
A类:
从模块b类b导入b
b=b()
/模块/class_b.py
B类:
从模块a.class a导入a
a=a()
将模块b.class作为mb导入
A类:
b=mb.b()
/模块/class_b.py
将模块a.class作为ma导入
B类:
a=ma.a()
A类:
将模块b.class作为mb导入
b=mb.b()
/模块/class_b.py
B类:
将模块a.class作为ma导入
a=ma.a()
结果是所有的解决方案都不起作用。我不知道这是否与调用是在类定义上这一事实有关,但需要这样做,因为我使用的是ORM。在Python中,您试图做的事情根本无法以这种方式完成。由于类定义相互依赖于另一个类的类的存在,所以没有另一个类,两个类都不能成功定义。即使在同一个文件中,这也会失败:
A类:
b=b()
B类:
a=a()
名称错误:未定义名称“B”
无论如何,循环依赖都会被考虑,并且总是可以通过使用不同的类设计来避免。考虑一个更具体的问题,如果这会给你带来麻烦,那么如何重构。你是否使用<代码>导入…<代码>或<代码>…导入…不相关;两者都必须导入模块,后者只需在导入后替换像
a=module.a
这样的赋值。“不起作用”到底是什么?我得到的要么是“ImportError:无法从'module_A.class_A'导入名称'A'”要么是“AttributeError:module'module_A.class_A'没有属性'A',将import
语句放入类中(以任何一种形式)不会延迟它们。它们发生在执行类
定义时。我明白了。在这种情况下,处理不同文件上的模型之间的一对多关系的方法是什么?@DouglasRamos从它看来,您会在类中声明一个位于“多”上的外键结束,并可以选择声明一个相关的\u名称
。然后,Django处理了一个神奇的功能,即能够通过一个集合访问“one”类中的“many”类,而不需要“one”类显式引用它(因此不需要导入模块)。