["python"]
How can you set class attributes from variable arguments (kwargs) in python

Suppose I have a class with a constructor (or other function) that takes a variable number of arguments and then sets them as class attributes conditionally. I could set them manually, but it seems that variable parameters are common enough in python that there should be a common idiom for doing this. But I'm not sure how to do this dynamically. I have an example using eval, but that's hardly safe. I want to know the proper way to do this -- maybe with lambda? class Foo: def setAllManually(self, a=None, b=None, c=None): if a!=None: self.a = a if b!=None: self.b = b if c!=None: self.c = c def setAllWithEval(self, **kwargs): for key in **kwargs: if kwargs[param] != None eval("self." + key + "=" + kwargs[param])
You could update the __dict__ attribute (which represents the instance attributes in the form of a dictionary) with the keyword arguments: class Bar(object): def __init__(self, **kwargs): self.__dict__.update(kwargs) then you can: >>> bar = Bar(a=1, b=2) >>> bar.a 1 and with something like: allowed_keys = {'a', 'b', 'c'} self.__dict__.update((k, v) for k, v in kwargs.items() if k in allowed_keys) you could filter the keys beforehand (use iteritems instead of items if you’re still using Python 2.x).