Correct way to resolve import ambiguity

Robin Becker robin at jessikat.demon.co.uk
Wed May 17 05:55:56 EDT 2000


I have a package structure
A.B.f
A.B.p
A.B.d

#f.py
class F:
        pass

#p.py 
from f import F
class P(F):
        pass

#d.py
from f import *
class D:
        def b(self,A):
                assert filter(lambda x: not isinstance(x,F), A)==[], "A argument error"

if __name__=='__main__':
        def run():
                from A.B.p import P
                d = D()
                d.b([P()])
        run()

python d.py fails in d.b as it seems that using
from A.B.p import P isn't the same as
from p import P

What is the 'correct' way to resolve the ambiguity?
Should I eschew the use of sibling imports? That would seem to make maintenance/re-use harder ie
I couldn't just move the sources around.

This version of d.py runs fine 
#d.py v2
from f import *
class D:
        def b(self,A):
                assert filter(lambda x: not isinstance(x,F), A)==[], "A argument error"

if __name__=='__main__':
        def run():
                from A.B.d import D
                from A.B.p import P
                d = D()
                d.b([P()])
        run()
-confused-ly yrs- 
Robin Becker



More information about the Python-list mailing list