時には、いくつかの特別な場合、メソッド呼び出すメソッド名の文字列を使用する必要があります。今すぐ後で判明してを避けるためにメモしておきます。
関数/メソッドを呼び出すために文字列を使用する方法?
から選択する多くの技術があります。
ベストプラクティスは、辞書の文字列にマッピング機能を使用することです。この技術の主な利点は、文字列は、関数名と一致する必要がないということです。これは、言語の場合には他の構造をシミュレートするために使用される主な技術です。
def a():
pass
def b():
pass
dispatch = {'go': a, 'stop': b} # Note lack of parens for funcs
dispatch[get_input()]() # Note trailing parens to call function
()組み込み関数のgetattrを使用します
import foo
getattr(foo, 'bar')()
注GETATTR()クラス、クラスインスタンス、モジュール、等を含む、任意の目的のために使用することができます。
標準ライブラリでは、私には、例えば、この技術を何度も使用しました。
class Foo:
def do_foo(self):
...
def do_bar(self):
...
f = getattr(foo_instance, 'do_' + opname)
f()
名前を解決するために、地元の人々()やeval()関数を使用します:
def myFunc():
print("hello")
fname = "myFunc"
f = locals()[fname]
f()
f = eval(fname)
f()
注意:evalの()を使用して遅いと危険です。あなたは絶対に文字列の内容を制御できない場合は、他の人が直接機能を実行するために解決することができる任意の文字列を渡すことができるようになります。