Possible Duplicate:
Circular (or cyclic) imports in Python
I have class B that imports and creates instances of class A.
Class A needs reference to B in its contructor and so includes 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
This doesn't work. The main file imports B and uses it... not.
Something with the imports is wrong.
Error from file a
ImportError: cannot import name B
Apart from "don't do that, you are painting yourself into a corner", you could also postpone the import of B until you need it. File a.py
:
class A:
def __init__(self, ref):
from b import B
assert isinstance(ref, B)
self.ref = ref
Class B
won't be imported until you instantiate class A
, by which time the module already has been imported fully by module b
.
You can also use a common base class and test for that.
Just import classes in __init__
method
class A:
def __init__(self, ref):
from b import B
assert isinstance(ref, B)
self.ref = ref
The __init__
method executes when you create an instance of the class. In this case, you should get it to work by simply changing the import statements like this:
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