解决python中的循环导入错误

时间:2012-04-05 10:37:10

标签: python class python-import

  

可能重复:
  Circular (or cyclic) imports in Python

我有B类导入并创建A类的实例。 A类需要在其构造函数中引用B,因此包括B。

from a import A
class B:
  def __init__(self):
    self.a = A()

from b import B
class A:
  def __init__(self, ref):
    assert isinstance(ref, B)
    self.ref = ref

这不起作用。主文件导入B并使用它......不是。 导入的东西是错误的。

文件错误 ImportError:无法导入名称B

3 个答案:

答案 0 :(得分:13)

除了“不要那样做,你把自己画成一个角落”,你也可以推迟B的导入,直到你需要它为止。档案a.py

class A:
    def __init__(self, ref):
        from b import B
        assert isinstance(ref, B)
        self.ref = ref

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

您还可以使用公共基类并对其进行测试。

答案 1 :(得分:1)

只需在__init__方法

中导入类
class A:
   def __init__(self, ref):
      from b import B
      assert isinstance(ref, B)
      self.ref = ref

答案 2 :(得分:0)

创建类的实例时会执行__init__方法。在这种情况下,您应该通过简单地更改导入语句来实现它:

import a 
class B:
  def __init__(self):
    self.a = a.A(self)

import b
class A:
  def __init__(self, ref):
    assert isinstance(ref, b.B)
    self.ref = ref