Python - 对象的参数及其作为函数参数的值

时间:2017-12-10 00:31:33

标签: python arguments parameter-passing keyword

我想创建一个泛型函数,它将具有不同类型参数的不同类型的对象作为参数,如下所示:

def func(obj, param, param_values):
    for param_value in param_values:
        obj.setParam(param=param_value)
        # do some stuff
    end

现在我想用不同的对象调用该函数,这些对象采用不同的参数名称,如下所示:

func(obj1(), width, {1,2,3,4})
func(obj2(), height, {4,5,6})

然而,当我这样写的时候,我有一个错误,说“' param'不是obj1和obj2的参数。

我如何编写我的功能,使其成为' param'的价值。这是阅读而不是“param”这个词。 同样适用于' param_value'因为我预计它可能会导致同样的问题。

3 个答案:

答案 0 :(得分:1)

使用setattr向对象添加属性。

例如:

class Foo:
    def __init__(self):
        self.a = "hi"

foo = Foo()
foo.a # "hi"

def func(obj, param, param_values):
    setattr(obj, param, param_values)

func(foo, "b", [1,2,3])

foo.b # [1,2,3]

答案 1 :(得分:1)

我认为你正在寻找setattr功能。

E.g:

def func(obj, param, param_values):
    for param_value in param_values:
        setattr(obj, param, param_value)
        # do some stuff
    end

答案 2 :(得分:0)

您可以使用**kwargssetattr向对象添加可变数量的参数。

class Foo:
    def __init__(self):
        pass

def func(obj, **kwargs):
    for k,v in kwargs.items():
        setattr(obj,k,v)

foo = Foo()

func(foo, width={1,2,3,4}, height={4,5,6})

print("width: {}".format(foo.width))
print("height: {}".format(foo.height))