オブジェクト (インポートされたモジュールを含む) でメソッドを呼び出す場合は、次を使用できます。
getattr(obj, method_name)(*args) # for this question: use t[i], not method_name
例えば:
>>> s = 'hello'
>>> getattr(s, 'replace')('l', 'y')
'heyyo'
現在のモジュールで関数を呼び出す必要がある場合
getattr(sys.modules[__name__], method_name)(*args)
whereargs
は、送信する引数のリストまたはタプルです。または、他の関数と同様に、呼び出しでそれらをリストすることもできます。同じオブジェクトで別のメソッドを呼び出そうとしているメソッドにいるのでself
、代わりに最初のものを使用しますobj
getattrはオブジェクトと文字列を取り、オブジェクト内で属性検索を行い、存在する場合は属性を返します。 obj.x
そしてgetattr(obj, 'x')
同じ結果を達成します。この種の反射をさらに調べたい場合はsetattr
、 、hasattr
、および関数もあります。delattr
完全に別のアプローチ:
この回答がどれだけの注目を集めているかに気づいた後、私はあなたがしていることに対して別のアプローチを提案するつもりです. 私はいくつかの方法が存在すると仮定します
def methA(*args): print 'hello from methA'
def methB(*args): print 'bonjour de methB'
def methC(*args): print 'hola de methC'
各メソッドを番号 (選択) に対応させるために、番号をメソッド自体にマッピングする辞書を作成します。
id_to_method = {
0: methA,
1: methB,
2: methC,
}
これを考えると、id_to_method[0]()
を呼び出しmethA
ます。これは 2 つの部分からなり、最初はid_to_method[0]
辞書から関数オブジェクトを取得し、次にそれを()
呼び出します。実際のコードでは、引数を渡すこともできid_to_method[0]("whatever", "args", "I", "want)
ます。上記を考えると、おそらく次のようなものになるでしょう
choice = int(raw_input('Please make a selection'))
id_to_method[choice](arg1, arg2, arg3) # or maybe no arguments, whatever you want