2012-04-16 84 views
0

可能重複:
Python: Circular (or cyclic) imports在Python中導入衝突?

我是新來的Python,和我有一個問題,但我不能完全肯定,如果這是我的問題。我有兩個文件,user.py和comments.py。在user.py,我做

from comments import Comment 

和comments.py我做

from user import User 

我的用戶負載很好,但是當我打開通向評論的URL,我得到了一個服務器錯誤。評論出from comments import Comment解決了這個問題。難道我做錯了什麼?

+1

你能告訴我們'comments.py'文件的內容嗎? – Tadeck 2012-04-16 22:25:45

回答

1

是的,你有一個循環導入,並導致許多許多問題。如果您考慮導入時實際發生的情況,則類似於「將代碼從文件x複製到此文件中」,但如果您從x複製到y然後從y複製到x,則您已創建一個無限循環,在這種情況下,解釋器難以找出哪個模塊應該取代或加載哪個模塊。但是,如果您的程序架構正確,則不應該有任何問題。你有什麼理由讓這個通告進口?如果我們更仔細地看待問題,機會實際上並不需要它。

+0

兩個文件都需要對方。有沒有辦法解決這個問題? – Snowman 2012-04-16 22:27:09

+3

@mohabitar:是的,修復你的設計。 – 2012-04-16 22:27:56

+0

謝謝你的洞察斯文。無論如何,我認爲我只是將我的代碼整理到兩個單獨的文件中。我不希望與用戶相關的功能與評論相關的功能位於相同的文件中。所以我把它們分開了。但由於用戶可以發表評論,並且評論需要用戶,所以我確實需要引用他們。有一個更好的方法嗎? – Snowman 2012-04-16 22:30:29

1

這種循環導入不起作用。導入模塊意味着基本上執行它中的語句。 import語句會在遇到它們時執行,因此至少在其中一個模塊中,其他模塊尚未初始化,因此導入將失敗。

循環依賴被認爲是反模式。在某些情況下,它們會以某種方式自然發生,但總的來說,它們是不良設計的標誌。

您可以通過將其中一個導入語句移至模塊末尾或功能級別來完成此工作,但我建議您不要這些「修復」。