0

子命令的argparse 文档add_parser说通过调用返回的对象上的方法来添加子解析器add_subparsers。该add_parser方法“采用命令名称和任何ArgumentParser构造函数参数,并返回一个ArgumentParser可以照常修改的对象。”

除了创建一个覆盖该add_parser方法的子类之外,我是否可以添加一个本身是子类的子解析器ArgumentParser

4

2 回答 2

2

我认为 mgilson 的回答几乎是正确的,但是您可以在不依赖这样的实现细节的情况下做到这一点:

class Foo(ArgumentParser): pass

parser = ArgumentParser()
subparsers = parser.add_subparsers(parser_class=Foo)
subparser = subparsers.add_parser(...)
于 2013-09-30T23:46:45.723 回答
0

看了源码后,ArgumentParser是whoich的一个子类,_ActionsContainer继承了whoset_SubParsersAction__init__一个_parser_class属性。. 然后使用此属性构建新的解析器

换句话说,类似:

class Foo(ArgumentParser): pass

parser = ArgumentParser()
parser._parser_class = Foo
subparser = parser.add_parser(...)

应该可以工作(尽管我还没有测试过)。你会依赖这里的实现细节......但我认为没有任何官方方法可以让它工作。

于 2013-06-16T17:49:47.727 回答