有没有更好的方法来更新与kwargs对象dict?

时间:2017-03-21 18:26:38

标签: python

这是我采用的当前方法来更新传递给它的关键词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)

1 个答案:

答案 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实例。