Resolve circular import error in python

class, python, python-import

Solution

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.

Problem

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

Original source

Related problems