Python - параметр объекта и его значение в качестве аргумента функции

Я хочу создать общую функцию, которая принимает в качестве аргумента различные объекты с разными типами параметров, например:

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})

Однако, когда я пишу это таким образом, у меня возникает ошибка, говорящая, что «параметр» не является параметром obj1 и obj2.

Как я могу написать свою функцию так, чтобы читалось значение «парам», а не слово «парам»? То же самое касается «param_value», так как я предполагаю, что это может привести к той же проблеме.


person user3548298    schedule 10.12.2017    source источник


Ответы (3)


Используйте 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]
person andrew_reece    schedule 10.12.2017

Я думаю, вы ищете функцию setattr.

E.g:

def func(obj, param, param_values):
    for param_value in param_values:
        setattr(obj, param, param_value)
        # do some stuff
    end
person Ido S    schedule 10.12.2017

Вы можете добавить к объекту переменное количество аргументов с помощью **kwargs и setattr.

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))
person drumhellerb    schedule 10.12.2017