formatter_class + argparse多重继承
多重继承只是起作用,虽然它似乎不是公共API:
#!/usr/bin/env python3
import argparse
import sys
class RawTextArgumentDefaultsHelpFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawTextHelpFormatter): pass
parser = argparse.ArgumentParser(formatter_class=RawTextArgumentDefaultsHelpFormatter)
parser.add_argument('-a', default=13, help="""my help
for a""")
parser.add_argument('-b', default=42, help="""my help
for b""")
parser.print_help()
输出:
usage: a.py [-h] [-a A] [-b B]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a (default: 13)
-b B my help
for b (default: 42)
它只是起作用,因为我们可以从源代码[https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648]中轻松地看到:
formatter_class实现argparse
formatter_class实现argparse
所以我们可以猜测它们会很好地协同工作。
但是,这似乎不是公共API,也不是formatter_class的方法,因此我认为目前没有公共API方法可以做到这一点。 argparse docstring说:
本模块中的所有其他类都被视为实现细节。 (另请注意,HelpFormatter和RawDescriptionHelpFormatter仅适用于 被视为公共对象名称 - 格式化程序对象的API是 仍然被认为是一个实施细节。)
另请参阅:自定义argparse帮助消息
在Python 3.6.5上测试。