2017-01-09 17 views
0

globalsを使用して、名前が文字列と一致する関数を呼び出そうとしています。たとえば、次のようにglobals()を使用して他のファイルの関数を呼び出す

def abc(): 
    print('test') 

globals()['abc']() # -> test 

しかしabcは別のファイルにある場合、どのように私は、この関数を呼び出す必要があります。

import file_that_have_abc as imp 
globals()['imp.abc']() 

は最近のファイルで関数名 'imp.abc'を代わりに呼び出すため、機能しません。

+2

?あなたが 'somefile'と' somefile.abc'を持っていれば、 'getattr(somefile、 'abc')'はそれにアクセスできますが、文脈がなければhttp://xyproblem.info – jonrsharpe

答えて

2

利用getattrモジュールのメンバーにアクセスするための:あなたはがあまりにもモジュールを検索するを必要としない場合はもちろんの

func = getattr(globals()['file_that_have_abc'], 'abc') 
func() 

を、あなたはここでglobalsをドロップすることができます。

0

globals()コールを使用するだけで、現在のモジュールの変数にアクセスすることができます。他のモジュールでは、モジュールをインポートした名前を使用してください。名前から文字列として関数/クラス/変数を取得するには、getattr関数を使用してください。例えば

:あなたが*実際に*ここでやろうとしている何

import math 
func = `sin` 

getattr(math, func)(0) 
関連する問題