2012-02-06 54 views
9

我試圖從另一個模塊導入一個類裏面只是一個變量:導入從另一個模塊類變量

import module.class.variable 
# ImportError: No module named class.variable 

from module.class import variable 
# ImportError: No module named class 

from module import class.variable 
# SyntaxError: invalid syntax (the . is highlighted) 

我可以做以下的,但我寧願只導入一個變量我需要。

from module import class as tmp 
new_variable_name = tmp.variable 
del tmp 

這可能嗎?

回答

10
variable = __import__('module').class.variable 
+0

我正確地認爲這會導入整個模塊嗎?相當於'import module'然後'variable = module.class.variable'? – 2012-02-06 02:58:34

+7

除了它不會綁定任何名稱到導入的模塊。是好的;'從模塊導入clazz'「導入整個模塊」,*完全相同的方式*。沒有辦法解決這個問題;類定義不能保證沒有任何意義,沒有模塊的其餘部分上下文以及類的屬性。 – 2012-02-06 03:00:22

+0

@Alex它將始終導入* whole *模塊(但它取決於您的語句)*在腳本範圍中可用的*)。 '從x1導入x2'將加載'x1',然後在'x2'的範圍或子包中查找'x2'的位置。 – 2012-02-06 06:20:28

5

你不能做到這一點 - import語句只能帶來從模塊或子元素 - 類屬性,雖然尋址與用於子模塊接入同一個點語法,不能單獨進口。

你可以做的是:

from mymodule import myclass 
myvar = myclass.myvar 
del myclass 

無論哪種方式,只要一個不使用from module import anything語法,整個模塊讀取和processed.The例外是

from module.submodule import submodule 

方案,其中如果子模塊本身不需要整個模塊,只有子模塊被處理。

(所以,即便onmy上面的解決方法,mymodule被讀取,並執行 - 在sys.modules字典是沒有取得在全局命名空間,其中import語句是由訪問,但將是可見的,其所有的組成部分,

+0

您的解決方法看起來非常類似於我的解決方法!感謝您的解釋 – 2012-02-06 03:27:42

相關問題