为什么 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)
与字典相比,命名空间更适合于此的原因是什么。仅仅是因为访问 foo.bar
这样的值看起来比 foo['bar']
更好吗?不可能。我觉得我一定是错过了什么。
我怀疑原因是灵活性。支持属性分配的 class 比需要 __getitem__
和 __setitem__
.
请注意,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)