文字列名と変数の辞書に基づいて、さまざまなパラメーターを受け入れるクラスのメソッドを動的に呼び出すことができる必要があります。inspect モジュールを使用して署名を見つける方法は知っており、getattr を使用してメソッドを取得できますが、パラメーターを正しい順序で割り当てて純粋に動的な方法で呼び出す方法がわかりません。
class MyClass():
def call_me(a, b, *args, foo='bar', **kwargs):
print('Hey, I got called!')
command = {
'action':'call_me',
'parameters':{
'a': 'Apple',
'b': 'Banana',
'args':['one','two','three','four'],
'foo':'spam',
'clowns':'bad',
'chickens':'good'
}
}
me = MyClass()
action = getattr(me,command['action'])
... now what?
メソッドの実際のパラメーターを事前に知らなくても、このコードが使用されているかのように、この関数を動的に呼び出すことができる必要があります。
a = command['parameters']['a']
b = command['parameters']['b']
args = command['parameters']['args']
foo = command['parameters']['foo']
kwargs = {
'clowns': command['parameters']['clowns'],
'chickens':command['parameters']['chickens']
}
value = action(a, b, *args, foo=foo, **kwargs)
確かにこれを行うための良いpythonicの方法があります。
編集: MyClass の代わりに MyClass のインスタンスを直接呼び出すように getattr を修正しました。