我有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
答案 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