2017-01-04 26 views
0

私は変数名でimportを使いたいと思っていました。たとえば、私は私がニシキヘビdocumentationを経たこの変数名としてのPythonのインポート

from var import my_class 

のようなものをやってみたかったが、少し混乱thatsのようです。また、私はこのような例を与えるスタックオーバーフローに関する他の投稿を見た。

import importlib 
my_module = importlib.import_module("var, my_class) 

この2番目の例はある程度は機能する。私がここに表示されている唯一の問題はvarがインポートされていますが、私はPythonの名前空間にmy_classの属性が表示されません。どのように私は

from var import my_class 

答えて

3

は(2番目のパラメータの必要はありません)importlibを使用する方法は次のとおりです。

var = importlib.import_module("var") 

# Now, you can use the content of the module: 
var.my_class() 

from var import my_classには直接のプログラマブル同等はありません。

+0

これは私が間違って使用していた。ありがとう。 – Matt

+1

'my_class = importlib.import_module(" var ").__ getattribute __(" my_class ")'は、 'from var import my_class'の直接プログラマブルな同等物ですか? –

+0

@ChristopherShroba私はあなたができると思います。 – DyZ

-2

の私の元の例にこれを等しくなります:@DYZはコメントで指摘するように、これを解決するためのこの方法は、のimportlibの賛成で推奨されていません。別の解決策のためにここに残してください。Python docsアドバイス「直接使用のインポート()は、importlib.import_module()のために推奨されません。

名前で変数が定義されているモジュールをインポートすることを意味しますか?その場合は__import__メソッドを使用できます。たとえば、次のように

>>> import os 
>>> os.getcwd() 
'/Users/christophershroba' 
>>> 
>>> name_to_import = "os" 
>>> variable_module = __import__(name_to_import) 
>>> variable_module.getcwd() 
'/Users/christophershroba' 

あなたも、あなたが機能を取得するためにモジュールに__getattribute__メソッドを使用して、通常通り()でそれを呼び出すことができ、その変数モジュールの変数メソッドを呼び出したい場合は

。 「注記」と記されている行は必要ありません。 __getattribute__メソッドが関数を返すことを示すためにその行を含めます。 Python 3 hereまたは Python2 hereために利用可能な

>>> name_to_import = "os" 
>>> method_to_call = "getcwd" 
>>> variable_module = __import__(name_to_import) 
>>> variable_module.__getattribute__(method_to_call) # See note 
<built-in function getcwd> 
>>> variable_module.__getattribute__(method_to_call)() 
'/Users/christophershroba' 

その他のドキュメント。ここで

+0

https://docs.python.org/3.4/library/functions.html#__import__:これは、 'importlib.import_module()'とは異なり、毎日のPythonプログラミングでは必要ない高度な機能です。 – DyZ

+0

python 3 docsはほとんどあなたに言っています "Noteプログラムのインポートは、この関数の代わりにimport_module()を使うべきです。"質問にはPython 3というタグが付いています。 – pvg

+0

ああ。有難うございます!私はそれが落胆したことを決して実感しませんでした。私の答えにメモを付け加えました! –

関連する問題