Question about circular imports
OKB (not okblacke)
brenNOSPAMbarn at NObrenSPAMbarn.net
Mon Feb 27 22:55:12 EST 2012
Frank Millman wrote:
>>
>> To avoid the tedious reference, follow this with
>> read = sound.formats.wavread # choose the identifier you prefer
>>
>
> @Terry and OKB
>
> I tried that, but it does not work.
>
> a.py
> /b
> __init__.py
> c.py
> d.py
>
> a.py -
> from b import c
> c.py -
> import b.d
> d.py -
> import b.c
>
> If I run a.py, it returns with no error.
>
> c.py -
> import b.d
> d = b.d
> d.py -
> import b.c
> c = b.c
>
> If I run a.py, I get
>
> Traceback (most recent call last):
> File "F:\tests\a.py", line 1, in <module>
> from b import c
> File "F:\tests\b\c.py", line 1, in <module>
> import b.d
> File "F:\tests\b\d.py", line 2, in <module>
> c = b.c
> AttributeError: 'module' object has no attribute 'c'
>
> I get the same if I try 'import b.c as c'.
Interesting, you're right. Note that it will work in c.py but not
in d.py
Anyway, testing this just reinforced my distaste for circular
imports. Just trying to think about how it ought to work with a
importing c but then c and d importing each other makes my brain hurt.
Refactoring the files so that common code is in a separate library
imported by both is easier to understand, and has the nice side bonus
that it works.
--
--OKB (not okblacke)
Brendan Barnwell
"Do not follow where the path may lead. Go, instead, where there is
no path, and leave a trail."
--author unknown
More information about the Python-list
mailing list