我需要能够根据字符串名称和变量字典在接受各种参数的类上动态调用方法。我知道如何使用检查模块找到签名,并且可以使用 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方法来做到这一点。
编辑:修复 getattr 以直接调用 MyClass 而不是 MyClass 的实例。