我使用Python3,希望用一个自定义类包装argparse.ArgumentParser,该类设置

class CustomParser(argparse.ArgumentParser):
def __init__(self, formatter_class=argparse.RawDescriptionHelpFormatter, **kwargs):
    # noinspection PyArgumentList
    super().__init__(formatter_class=formatter_class, **kwargs)  # warning in this line for the last argument if suppression comment above removed

如果使用IntelliJ suppression命令删除注释,kwargs上的警告"应该是一本字典,得到一个dict",但它仍然有效.这是一个假阳性警告,还是在没有警告的情况下可以做得更好?这一警告背后是否有一个真正的问题,它有助于避免?

Side question: Is there a difference in using
formatter_class = kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter) instead of explicitly defining the named parameter in the signature? According to PEP20 more explicit in the signature is better, right?

推荐答案

是的,这似乎是假阳性.

你问的是formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter).请不要那样做.变异kwargs似乎很糟糕,这似乎是下一个论点.此外,默认关键字args应该设置为一个简单常量,而不是一些可变的数据 struct ,因为在导入时求值和在运行时求值之间有很大的区别.参见例http://www.effbot.org/zone/default-values.htm.通常的习惯用法是签名中的formatter_class=None,然后在身体中你测试没有,然后你可以随心所欲地变异kwargs.

Python-3.x相关问答推荐

使用Python装载. iso文件

如何定义既允许固定单词又允许模式的pydanti.BaseModel?

如何在输入正确的用户名和密码时添加按钮?

为什么我的Selenium脚本在密码元素上失败?

将列表项的极列水平分解为新列

Pandas 插入的速度太慢了.对于跟踪代码,什么是更快的替代方案?

在 sum() 中将字符串转换为 int (或 float)

替换 .txt 文件中的项目列表

两个 y 轴在零处对齐的 plotly barplot

从列表的元素和python中的多个多索引数据帧执行方程

如何将列表和字典逐行组合在一起

获取嵌套字典的所有键

multiprocessing.Queue 中的 ctx 参数

无法在 Windows 8 中使用 Python 3.3 找到 vcvarsall.bat

根据条件过滤元组列表

当 None 被传递时,如何将默认值应用于 python 数据类字段?

清除 PyCharm 运行窗口

三个参数的reduce函数

有没有一种标准方法来确保 python 脚本将由 python2 而不是 python3 解释?

在 Python 中生成马尔可夫转移矩阵