How to resolve this kind of Circular dependency in Python
我遇到了如下所示的一些情况,每个类都需要另一个类,它创建了循环依赖关系。我在使用ctypes包装一些C代码时遇到了这种类型情况。关于这个主题已经有很多文章了,但是我觉得它们没有帮助,我需要一些例子。任何解决这一问题的想法/例子都将是有益的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Module A from B import C2 class C1(object): def __init__(self): self.name ="C1" self.c2 = C2() # Module B from A import C1 class C2(object): def __init__(self): self.name ="C2" self.c1 = C1() # Main from A import C1 if __name__ =="__main__": o = C1() print o.name |
解决方案(假设解决了最小递归):
避免这种循环依赖。
将相互依赖的组件放入同一个模块中。
使用
使用函数级导入。
将模块B更改为不导入类
1 2 3 4 5 | class C2(object): def __init__(self): from A import C1 self.name ="C2" self.c1 = C1() |
请注意,由于
在任何语言中,这都是循环依赖,实际上它是无限递归
将c2从c1中取出,c1从c2中取出
1 2 3 4 5 6 7 | from B import C2 from A import C1 class C3(object): def __init__(self): self.c1 = C1() self.c2 = C2() |
号
由于这是一个循环导入错误,请从模块B中删除import语句->"from a import c1"。
在需要的地方导入"c1"(方法内部)。
像这样-从B进口C2
C1类(对象):
1 2 3 | def __init__(self): self.name ="C1" self.c2 = C2() |
C2类(对象):
1 2 3 4 | def __init__(self): import A.C1 self.name ="C2" self.c1 = C1() |
。