好吧,我不明白,這個話題是老得要命,但我無法找到答案,我問特定問題。圓形進口和類字段python3
比方說,我們有一個非常簡單的結構:兩個文件,a.py
和b.py
,其內容是:
a.py
import b
class C:
lal = 4
class A:
kek = 12
lol = b.B()
b.py
import a
class B:
aa = a.C()
試圖運行python b.py
,我們得到:
Traceback (most recent call last):
File "b.py", line 1, in <module>
import a
File ".../a.py", line 1, in <module>
import b
File ".../b.py", line 3, in <module>
class B:
File ".../a.py", line 5, in A
aa = a.C()
AttributeError: module 'a' has no attribute 'C'
但如果我們移動import b
線後的C
類,腳本啓動,併產生沒有錯誤。
我還沒有發現這個任何提及任何在這裏,所以任何答案。這裏的問題是:爲什麼會出現這種情況和如何逃脫呢?
這是Django框架的一個特別重要的問題。當我有很多模型時,我會嘗試將它們分成許多文件。在那裏獲得循環導入非常容易。
我不是很受這個領域的教育,但我相信答案在這裏:https://docs.python.org/3/reference/import.html。我也建議使用「from module_x import class_y」而不是「import *」。它可以幫助我們避免這些問題。 –
在加載程序執行模塊代碼之前,模塊將存在於sys.modules中。這是至關重要的,因爲模塊代碼可能(直接或間接)導入自己;事先將它添加到sys.modules可以防止在最壞的情況下進行無限遞歸,並在最佳情況下多次加載。 –