我提出了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()。