3 回答
TA贡献1843条经验 获得超7个赞
您可以__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)。
TA贡献1883条经验 获得超3个赞
您可以使用以下setattr()方法:
class Foo:
def setAllWithKwArgs(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
有一种类似的getattr()方法来检索属性。
TA贡献1803条经验 获得超3个赞
我提出了fqxp答案的一种变体,除了允许的属性外,还可以让您设置属性的默认值:
class Foo():
def __init__(self, **kwargs):
# define default attributes
default_attr = dict(a=0, b=None, c=True)
# define (additional) allowed attributes with no default value
more_allowed_attr = ['d','e','f']
allowed_attr = list(default_attr.keys()) + more_allowed_attr
default_attr.update(kwargs)
self.__dict__.update((k,v) for k,v in default_attr.items() if k in allowed_attr)
这是Python 3.x代码,对于Python 2.x,您需要至少进行一次调整,iteritems()以代替items()。
添加回答
举报