如何从python中的变量参数(kwargs)设置类属性

假设我有一个带有构造函数(或其他函数)的类,该类接受可变数量的参数,然后有条件地将其设置为类属性。

我可以手动设置它们,但似乎变量参数在python中足够普遍,因此应该有一个共同的习惯用法。但是我不确定如何动态地执行此操作。

我有一个使用eval的示例,但这并不安全。我想知道正确的方法-也许用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])

回答:

您可以__dict__使用关键字参数更新属性(以字典的形式表示实例属性):

class Bar(object):

def __init__(self, **kwargs):

self.__dict__.update(kwargs)

那么你就可以:

>>> bar = Bar(a=1, b=2)

>>> bar.a

1

和类似的东西:

allowed_keys = {'a', 'b', 'c'}

self.__dict__.update((k, v) for k, v in kwargs.items() if k in allowed_keys)

您可以预先过滤键(如果您仍在使用Python 2.x,请使用iteritems代替items)。

以上是 如何从python中的变量参数(kwargs)设置类属性 的全部内容, 来源链接: utcz.com/qa/406261.html

回到顶部