这是我采用的当前方法来更新传递给它的关键词args中的对象dict?这是一种可接受的方式吗?有没有更好的办法?我的代码工作正常我只是想知道这是否是这样做的方式。谢谢!
class MyClass():
def __init__(self, **kwargs):
default_settings = {'style': None, 'mods': None, 'filt': True, 'gsize': 600, 'scale': False}
default_settings.update(kwargs)
self.__dict__.update(default_settings)
...
if __name__ == '__main__':
test = MyClass(style='some_style', filt=False, scale=True)
答案 0 :(得分:1)
建议:
您无法检查构造函数键中的拼写错误。至少,如果kwargs中的键不是default_settings中的键,则可能需要抛出异常。也许这个:
bad_keys = [k for k in kwargs.keys() if k not in default_settings]
if bad_keys:
raise TypeError(
"Invalid arguments for MyClass.__init__: %r" % bad_keys)
您可能希望default_settings是MyClass的静态成员,但是您必须将代码修改为:
self.__dict__.update(default_settings)
self.__dict__.update(kwargs)
...而不是修改本地default_settings实例。