Iは名前で指定されたオブジェクトのメソッドを文字列として呼び出す方法は?
myObj = myClass()
線によって生成される、のpython3オブジェクト(クラスのインスタンス)を有します。私はmyMethodName
文字列も持っています:
myMethodName = "exampleName"
です。 myMethodName
という名前のメソッドを呼び出すには、どうすればよいですか?myObj
したがって、この場合、myObj.exampleName
に電話をかけたいと思います。これはgetAttr(myObj, myMethodName)
のようになります。
残念ながら、Pythonドキュメント(たとえば、here)を参照する単純な解決策では、唯一のKeyError
またはAttributeError
が得られます。これは、そのmyMethodName
に失敗し
method = getAttr(myObj, myMethodName)
myObj.method(param)
少ない引数のよりました:
method = getAttr(myObj, myMethodName)
method(myObj, param)
は単に
method = getAttr(myObj, myMethodName)
method(param)
を呼び出す
これは、このmyobjはmethod
メソッドを持っていないことに失敗しました最も論理的である
は、
TypeError: exampleName() takes 1 positional argument but 2 were given
どうすればいいですか?
問題がある場合は、私はpython 3.6を使用します。 getattr
既にオブジェクトインスタンス(myObj
)に結合されている方法を返すため、最初のエラーが発生し
class Test:
name = None
def __init__(name):
self.name = name
def process():
method = getattr(self, 'process_' + name)
method("param")
def process_test(param):
print ("process_test(): "+param)
test = Test("cica")
test.process("test")
あなたの 'method'はすでにメソッドです。' method(params) 'のように呼び出すことはできませんか?あなたがMCVEを提供していれば、私はそれを自分自身でテストしたいと思っています。 –
@StefanPochmannまた、これは誤りです。私はそれを質問に拡張しました。 – peterh
@StefanPochmann MCVEが追加されました。 – peterh