合并 argparse.MetavarTypeHelpFormatter、argparse.ArgumentDefaultsHelpFormatter 和 argparse.HelpFormatter

问题描述 投票:0回答:1

我想显示

--help
的默认值、参数类型和大间距。

但是如果我这样做

import argparse
class F(argparse.MetavarTypeHelpFormatter, argparse.ArgumentDefaultsHelpFormatter, lambda prog: argparse.HelpFormatter(prog, max_help_position = 52)): pass
parser = argparse.ArgumentParser(
    prog = 'junk', 
    formatter_class = F)

出现以下错误

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

有谁知道如何正确组合这三个格式化程序?

python argparse
1个回答
0
投票

通过更简单的设置可以轻松重现相同的症状。

>>> def identity(prog):
...     return prog
... 
>>> class F(object, identity): pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

请引用您的参考文献。 我无法想象为什么有人会相信尝试 以这种方式配置 MRO 就会成功。 将帮助格式化程序功能放入一个类中并继承自that

您尝试做的事情不受支持, 并且 python 正确地提供了一个诊断来解释这一点。

© www.soinside.com 2019 - 2024. All rights reserved.