将函数调用的值返回值映射到对象属性

时间:2013-03-20 17:26:34

标签: python

我遇到了一个类对象,它有许多属性需要用各个函数调用的返回值填充。遗憾的是,属性名称不会将一对一映射到被调用函数的参数。如果没有反复进行手动映射,是否有一种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 = ...
...

1 个答案:

答案 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