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()。
添加回答
舉報