8

可能重复:
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 并使用它......不是。进口的东西是错误的。

来自文件 a ImportError 的错误:无法导入名称 B

4

3 回答 3

18

除了“不要那样做,你把自己画在一个角落里”,你还可以推迟 B 的导入,直到你需要它。文件a.py

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

B在您实例化 class 之前,不会导入Class A,此时模块已经完全由 module 导入b

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

于 2012-04-05T10:43:10.570 回答
2

只需在__init__方法中导入类

class A:
   def __init__(self, ref):
      from b import B
      assert isinstance(ref, B)
      self.ref = ref
于 2012-04-05T10:43:00.643 回答
1

__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
于 2012-04-05T11:26:50.783 回答