假设我有一个带有构造函数(或其他函数)的类,它接受可变数量的参数,然后有条件地将它们设置为类属性。
我可以手动设置它们,但似乎可变参数在 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 - 如何在 python 中从变量参数(kwargs)设置类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187082/