2010-11-09 99 views
0

我在從特定模塊導入類時遇到了一些麻煩。類是my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7Python導入問題

此代碼的工作

import my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7 

模塊,這意味着訪問我的課我必須做

my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7.MyClass 

在但這並不

from my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7 import MyClass 

無論這是否

進口my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7作爲MY_NAME

均可以得到這個錯誤說

AttributeError: 'module' object has no attribute my_module7' 

這有我徹底難倒了,我一直在它的一對夫婦現在幾星期。有什麼建議麼?

編輯 - 我不能改變不幸的是因爲它是由我使用

回答

3

看起來像一個循環導入。

Gordon McMillan說: 循環進口罰款,其中兩個模塊使用「進口」形式的進口。當第二個模塊想要從第一個模塊(「從模塊導入名稱」中取出一個名稱)並且導入位於頂層時,它們會失敗。這是因爲第一個名字尚不可用,因爲第一個模塊正在忙於導入第二個名字。

+0

+1我應該想到這一點。好的建議,我們會看到它發生的地方。 – Crisfole 2010-11-09 15:29:25

+0

是的,這是一個循環導入。我需要從我嘗試導入的類訪問類變量。你會建議如何解決這個問題?我最好重新考慮一下設計嗎? – 2010-11-09 17:22:23

+0

那麼,爲了解決它,你只需要將你的導入從頂層移動到一個函數或類中。重新設計可能是最好的,但那是你的電話。 – toc777 2010-11-10 11:09:51

0

系統強加我想你可能要考慮在首位的備用設計(重新設計你的模塊故障所以這是一個平坦的安裝結構),但因爲這是不是你的問題的嘗試:

import my_module1.my_module2.my_modu...<etc> 
my_name = my_module1.my_module2.my_modu...<etc> 
my_name.MyClass 

模塊是Python中的第一類對象,所以你可以通過使用變量別名他們。

+0

該代碼給出了AttributeError的:「模塊」對象有與MY_NAME行沒有屬性my_module7' = ... – 2010-11-09 15:22:29

+0

你能試試這個: 進口my_module1.my_module2.my_module ..... 目錄(my_module1 .my_mod .... my_module6) 明顯填滿完整路徑! 讓我知道它說什麼 – Crisfole 2010-11-09 15:25:16

+0

現在我在該行上得到一個AttributeError! (與dir(...)) – 2010-11-09 15:27:08