关于类:解决python中的循环导入错误

Resolve circular import error in python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Circular (or cyclic) imports in Python

我有导入和创建类A实例的类B。A类建筑需要参考B类建筑,因此包括B类建筑。

1
2
3
4
from a import A
class B:
  def __init__(self):
    self.a = A()
1
2
3
4
5
from b import B
class A:
  def __init__(self, ref):
    assert isinstance(ref, B)
    self.ref = ref

这不管用。主文件导入b并使用它…不是。进口货有问题。

文件A中的错误导入错误:无法导入名称B


除了"不要这样做,你在把自己画成一个角落",你也可以推迟B的进口,直到你需要它。文件a.py

1
2
3
4
5
class A:
    def __init__(self, ref):
        from b import B
        assert isinstance(ref, B)
        self.ref = ref

B在实例化类A之前不会被导入,此时模块B已经完全导入。

您还可以使用一个公共的基类并对此进行测试。


只导入__init__方法中的类

1
2
3
4
5
class A:
   def __init__(self, ref):
      from b import B
      assert isinstance(ref, B)
      self.ref = ref


创建类的实例时,将执行__init__方法。在这种情况下,您应该通过如下简单地更改import语句使其正常工作:

1
2
3
4
import a
class B:
  def __init__(self):
    self.a = a.A(self)
1
2
3
4
5
import b
class A:
  def __init__(self, ref):
    assert isinstance(ref, b.B)
    self.ref = ref