【问题标题】:Argparse module class functionsargparse 模块类函数
【发布时间】:2017-12-02 14:27:25
【问题描述】:

我对模块 arparse 的组织有点怀疑 以下代码可在 python 在线文档中找到

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

我假设 argparse 将是 module argparse.ArgumentParser() 将是模块内的一个 class 所以第二行只需创建该类的对象。下一行我们使用点运算符调用类中定义的方法。到此为止,一切都说得通了。我在想 args 将是一个简单的变量,但是当 args.echo 使用点运算符访问时,args 是什么类型?是不是 parser.parse_args() 返回 ArgmentParser() 类型的对象。 如果问题太天真,请道歉。

【问题讨论】:

  • 使用print(type(args)) 看看!

标签: python class object methods argparse


【解决方案1】:

https://docs.python.org/3/library/argparse.html#the-namespace-object

类 argparse.Namespace

parse_args() 默认使用的简单类来创建一个包含属性的对象并返回它。

尝试在您的发行版中找到argparse.py 文件并查看它,最好使用解析Python 的编辑器。几乎所有的代码都是类。有几个实用程序基类(容器等),但关键的是使用__all__ 列表导入。

在交互式过程中运行代码并查看创建的对象也很有指导意义。或者只是添加大量print(parser) 语句以查看它们各自的str

parser = argparse.ArgumentParser()

创建一个ArgumentParser 对象。

a = parser.add_argument("echo")

创建一个Action 对象(实际上是Action 的子类,根据action 参数。

args = parser.parse_args()

创建一个Namespace 对象,

vars(args)

args 属性创建一个字典对象。

【讨论】:

  • 感谢您的回答。我将进一步研究命名空间对象。谢谢
猜你喜欢
  • 2015-08-13
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多