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
Python __all__ It's a list of public objects of that module, as interpreted by import * . It overrides the default of hiding everything that begins with an underscore.
In software engineering, a circular dependency is a relation between two or more modules which either directly or indirectly depend on each other to function properly. Such modules are also known as mutually recursive.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With