为什么 ArgumentParser return 是命名空间而不是字典?

Why does ArgumentParser return a namespace instead of a dictionary?

与字典相比,命名空间更适合于此的原因是什么。仅仅是因为访问 foo.bar 这样的值看起来比 foo['bar'] 更好吗?不可能。我觉得我一定是错过了什么。

我怀疑原因是灵活性。支持属性分配的 class 比需要 __getitem____setitem__.

的 class 更通用

请注意,argparse.Namespace 只是 parse_args 的 return 值的默认值 class;您可以通过 namespace 关键字参数提供您自己的。

p = ArgumentParser()
# add options

class MyNamespace:
    pass

class MyDictNamespace:
    # Provide __getitem__ and __setitem__ wrappers around getattr and setattr
    ...

p1 = p.parse_args()  # Use the default Namespace class
p2 = p.parse_args(namespace=MyNamespace)
p3 = p.parse_args(namespace=MyDictNamespace)