连接/合并两个 Python SimpleNamespace

Tho*_*mas 4 python types

简单的问题:如何合并Python的SimpleNamespace?

看起来没有办法通过像a.update(b)or这样的简单命令来做到这一点a | b。事实上,我什至还没有找到一种方法来系统地访问 SimpleNamespace 的所有属性。

有线索吗?

Mis*_*agi 7

每个SimpleNamespace都有一个__dict__插槽,可以访问其实际属性。**- 将__dict__多个SimpleNamespaces 解压成一个新的,SimpleNamespace有效地合并它们。

>>> from types import SimpleNamespace
>>> first = SimpleNamespace(a=0, b=1, c=2)
>>> second = SimpleNamespace(x=0, y=1, z=2)
>>> SimpleNamespace(**first.__dict__, **second.__dict__)
namespace(a=0, b=1, c=2, x=0, y=1, z=2)
Run Code Online (Sandbox Code Playgroud)

请注意,通过TypeError这种方式合并具有重叠属性的命名空间。

要合并可能具有重叠键的名称空间,请使用中间字典并再次解压它 ( **{...})。后面的命名空间的值优先于此方案。

>>> first = SimpleNamespace(a=0, b=1, c=2)
>>> second = SimpleNamespace(c=0, d=1, e=2)
>>> SimpleNamespace(**{**first.__dict__, **second.__dict__})
namespace(a=0, b=1, c=0, d=1, e=2)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!在此基础上,我通过首先构建字典来防止“TypeError”:“args_dict = {**vars(existing_args), **vars(args)} args = SimpleNamespace(**args_dict)” (2认同)