不行,除非采用丑陋的技巧。
@Vladimir发布的代码片段,我想那不是你要找的。真正实现这个功能的代码如下:
def _get_option_tuples(self, option_string):
...
if option_string.startswith(option_prefix):
...
注意看这里,使用的是 startswith
而不是 ==
。
如果想改变默认行为,你可以扩展 argparse.ArgumentParser
并提供自己的 _get_option_tuples(self, option_string)
方法。我只需要将两个 option_string.startswith(option_prefix)
替换成 option_string == option_prefix
, 就成功地实现了自定义。
>>> parser = my_argparse.MyArgparse
>>> parser = my_argparse.MyArgparse()
>>> parser.add_argument('--send', action='store_true')
_StoreTrueAction(option_strings=['--send'], dest='send', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['--se'])
usage: [-h] [--send]
: error: unrecognized arguments: --se
注意事项
方法_get_option_tuples
以_
为前缀,这通常意味着在Python中是一个私有方法。覆盖私有方法并不是一个好主意。