Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有更好的方法用kwargs更新对象dict?_Python - Fatal编程技术网

Python 有没有更好的方法用kwargs更新对象dict?

Python 有没有更好的方法用kwargs更新对象dict?,python,Python,这是我当前使用的方法,通过传入的关键字args来更新objects dict?这是一种可以接受的方式吗?有更好的办法吗?我的代码运行得很好,我只是想知道这是不是一种方法。谢谢 class MyClass(): def __init__(self, **kwargs): default_settings = {'style': None, 'mods': None, 'filt': True, 'gsize': 600, 'scale': False} default_settin

这是我当前使用的方法,通过传入的关键字args来更新objects 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)
建议:

您将无法检查构造函数的键是否有拼写错误。至少,如果kwargs中的某个键不是默认_设置中的键,您可能希望抛出异常。也许是这样:

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)
您可能希望默认的_设置是MyClass的静态成员,但必须将代码修改为:

self.__dict__.update(default_settings)
self.__dict__.update(kwargs)

。。。而不是修改本地默认设置实例。

是的,这是完全合理的。我或多或少会这样做,模化一些验证。我不确定是否会在不首先检查键和值的情况下更新对象的
\uuuu dict\uuuu
。谢谢,我喜欢这种方法