在ipython会话中,这给出了由简单解析器脚本创建的对象的概念。 add_argument创建一个Action子类对象,放入一个列表,并返回它。由于这些是 Python 对象,因此可以检查(甚至修改)它们的属性。
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: type(parser)
Out[3]: argparse.ArgumentParser
In [4]: print(parser)
ArgumentParser(prog='ipython3', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
In [5]: parser.add_argument('-f','--foo')
Out[5]: _StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [6]: parser.add_argument('bar')
Out[6]: _StoreAction(option_strings=[], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [7]: parser._actions
Out[7]:
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None),
_StoreAction(option_strings=[], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)]
In [8]: vars(parser._actions[1])
Out[8]:
{'option_strings': ['-f', '--foo'],
'dest': 'foo',
'nargs': None,
'const': None,
'default': None,
'type': None,
'choices': None,
'required': False,
'help': None,
'metavar': None,
'container': <argparse._ArgumentGroup at 0x7f8a1f73dac8>}
由-hor生成的帮助parser.format_help是从这些对象创建的 - theparser和Actions(and groups)。解析也适用于这些。所以一切都存在。但我不会从我自己对parser说明的阅读中推断出所有这些——这相当于重新创建argparse.py代码。