0

我遇到了一个类对象,该对象具有许多需要用各个函数调用的返回值填充的属性。不幸的是,属性名称不会一对一地映射到被调用函数的参数。有没有一种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 = ...
...
4

1 回答 1

0

我不确定这是否是最 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
于 2013-03-20T20:49:29.617 回答