2012-02-06 8 views
9

からインポートクラス変数Iは、別のモジュールからクラスの内部だけで変数をインポートしようとしている:私は次の操作を行うことができます別のモジュール

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'と同じですか? –

+7

インポートしたモジュールに名前をバインドしない点を除きます。 'module import clazz'から'モジュール全体をインポートする 'もまったく同じ方法で*これを回避する方法はありません;クラス定義はモジュールの残りの部分がなくても意味をなさない文脈、クラスの属性についても同様である。 –

+0

@Alexこれは常に* whole *モジュールをインポートします(ただし、スクリプトのスコープでは*あなたのステートメント*によって決まります)。 'from x1 import x2'は' x1'を読み込み、 'x2'のスコープ内で、またはサブパッケージとして' x2'をどこから探すかを探します。 –

5

あなたはそれを行うことはできません - import文が唯一のモジュールまたはサブモジュールからの要素をもたらすことができます - サブモジュールへのアクセスのために使用されるのと同じドット構文でアドレス指定可能で、することはできませんが、クラスの属性を個別にインポートされます。

何ができることである。一つはfrom module import anything構文を使用しない時はいつでも

from mymodule import myclass 
myvar = myclass.myvar 
del myclass 

どちらにしても、全体のモジュールが読み込まれ、processed.The例外が

from module.submodule import submodule 

、もしありますサブモジュール自体はモジュール全体を必要とせず、サブモジュールのみが処理される。

(したがって、上記の回避策でさえ、mymoduleが読み込まれ実行されます。インポートステートメントが作成されたグローバル名前空間ではアクセスできませんが、すべてのコンポーネントとともに、sys.modules辞書に表示されます。

+0

あなたの回避策は私の回避策と著しく似ています!説明ありがとう –

関連する問題