我的團隊正在與Django合作開展一個龐大的項目。爲了簡單起見,下面是純Python來說明問題(原始問題有模型和應用程序,而不是類(我知道它們都是類)和包(我知道它們都是包)。用Python導入的無限循環;尋找Pythonic方式
a.py:
from b import B1
class A1(object):
def __init__(self):
print "object A1"
class A2(object):
def __init__(self):
print "object A2"
A1()
B1()
b.py:
from a import A2
class B1(object):
def __init__(self):
print "object B1"
A2()
當a.py被調用時,它試圖從b導入B1另一方面,該包裝試圖導入A2從a包,然後,從開始,這將永遠重複。蟒蛇說:
[[email protected] recursion]$ python2 a.py
Traceback (most recent call last):
File "a.py", line 1, in <module>
from b import B1
File "/home/dagrevis/Python/recursion/b.py", line 1, in <module>
from a import A2
File "/home/dagrevis/Python/recursion/a.py", line 1, in <module>
from b import B1
ImportError: cannot import name B1
解決的辦法之一就是讓每個對象一個文件。就像C++或Java一樣。然後我想起了Guido對Python的看法:「不要在Python中編寫Java(或C++,或Javascript,...)」。是否有更多的Pythonic方法來解決這個問題?
謝謝你的任何建議!
這裏是一些背景信息:[Python:Circular(or cyclic)imports](http://stackoverflow.com/q/744373/222914) –
可能的重複[Import Error。循環參考](http://stackoverflow.com/questions/11028711/import-error-circular-references) – mgilson