我想通过使用getattr函数添加参数来调用一些未知函数。有可能吗?
答案 0 :(得分:53)
是的,但你没有将它们传递给getattr()
;一旦引用该函数,就可以正常调用该函数。
getattr(obj, 'func')('foo', 'bar', 42)
答案 1 :(得分:32)
如果您希望使用动态参数/关键字参数列表调用动态方法,则可以执行以下操作:
function_name = 'wibble'
args = ['flip', 'do']
kwargs = {'foo':'bar'}
getattr(obj, function_name)(*args, **kwargs)
答案 2 :(得分:-1)
import sys
# function to call
def wibble(a, b, foo='foo'):
print(a, b, foo)
# have to be in the same scope as wibble
def call_function_by_name(function_name, args=[], kwargs={}):
getattr(sys.modules[__name__], function_name)(*args, **kwargs)
call_function_by_name('wibble', args=['arg1', 'arg2'], kwargs={'foo': 'bar'})
# output:
# arg1 arg2 bar