我不确定这是否是最 Pythonic 的方法,但只要您要调用的函数具有相同的签名,这是一种可行的替代方法:
class A(object) :
def __init__(self) :
d = {"arg1" : (1, "arg1_v"),
"arg2" : (2, "arg2_v")}
for key, value in d.items() :
setattr(self, key, f(*value))
a = A()
print a.arg1
print a.arg2
如果您想根据属性名称调用不同的函数,您甚至可以使用函数名称:
def f_arg1(x) :
return x
def f_arg2(x, y) :
return (x, y)
class A(object) :
def __init__(self) :
d = {"arg1" : ((1,), f_arg1),
"arg2" : ((2,3), f_arg2)}
for key, value in d.items() :
a, f = value
setattr(self, key, f(*a))
a = A()
print a.arg1
print a.arg2