Pythonのプログラムで、関数名の文字列を与えて関数を呼び出すには、どのような方法がありますか? 例えば、モジュール foo
があって、内容が "bar"
である文字列があるとします。このとき、foo.bar()
を呼び出すには、どのようにすればよいでしょうか。
関数の戻り値を取得する必要があるので、単に eval
を使うだけではありません。私はeval
を使って、その関数呼び出しの結果を返すテンポラリ関数を定義することで方法を見つけましたが、'もっとエレガントな方法があることを期待しています。
モジュール foo
のメソッド bar
を想定しています。
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
2行目と3行目を以下のように短縮することができます。
result = getattr(foo, 'bar')()
に短縮することができます(その方がより意味がある場合)。
クラスのインスタンスにバインドされたメソッドや、モジュールレベルのメソッド、クラスのメソッドなどに、この方法で getattr
を使用することができます......数え切れません。