我遇到了一个类对象,它有许多属性需要用各个函数调用的返回值填充。遗憾的是,属性名称不会将一对一映射到被调用函数的参数。如果没有反复进行手动映射,是否有一种pythonic方法来实现这一目的?
obj = MyClass()
obj.a_min = func(a1xyz, 'min')
obj.a_max = func(a2zzz, 'max')
obj.a_avg = ...
obj.b_min = ...
obj.b_max = ...
...
obj.n_min = ...
...
答案 0 :(得分:0)
我不确定这是否是最狡猾的方式,但只要你想要调用的函数具有相同的签名,这里有一个替代方案:
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