【问题标题】:Why does ArgumentParser return a namespace instead of a dictionary? [closed]为什么 ArgumentParser 返回命名空间而不是字典? [关闭]
【发布时间】:2018-08-15 21:13:17
【问题描述】:

是什么让命名空间比字典更理想。仅仅是因为访问像foo.bar 这样的值看起来比foo['bar'] 更好吗?不可能。我觉得我一定是错过了什么。

【问题讨论】:

  • 你可以使用:vars(parser.parse_args(...))
  • 您询问的是argparse 模块的作者所做的设计决策。不太可能有客观的答案。
  • 作为一个字典,你实际上得到了什么?
  • @chepner 我不同意。我怀疑比我更了解 Python 的人可以对此做出非常有根据的猜测(就像你所做的那样)
  • optparse.Values 类是类似的,一个简单的类,可以用setattr 修改(并用getattr 读取)。这种方法最大限度地减少了关于可以在对象中存储什么以及以什么名称存储的假设。

标签: python dictionary namespaces argparse


【解决方案1】:

我怀疑原因是灵活性。支持属性分配的类比需要__getitem____setitem__ 的类更通用。

注意argparse.Namespace只是parse_args返回值的默认类;您可以通过 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 2015-11-19
    • 2018-10-21
    • 2021-12-12
    • 1970-01-01
    • 2016-05-16
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多