如何在超类中定义一个方法,使它与任何子类兼容?

sds*_*sds 5 python inheritance class

我有几节课:

class Sup:
    def meth (self, ?????):
        pass

class Sub1(Sup):
    def meth (self, foo = 1):
        ...

class Sub2(Sup):
    def meth (self, bar = 2, baz = 3):
        ...
Run Code Online (Sandbox Code Playgroud)

?????Sup.meth用什么替换?

基本上,我想要一些类似于&restLisp中被忽略的lambda-list关键字来安抚arguments-differ/Arguments number differs from overridden method警告.

我尝试了什么:

  1. 添加**kwargsSup.meth- 没有改变任何东西
  2. 注释Sub*.meth# pylint: disable=arguments-differ-作品,但丑陋.

PS.Sup是一个收集统计数据的抽象类; Sub*有不同的方法来做到这一点; meth用不同的铃铛和口哨打印物体.

Kev*_*ase 5

我发现 pylint 对许多 Python 功能有不同寻常的看法。它认为some_function(*list_of_args)是“坏魔法”,例如(W0124)。

当您和 pylint永远不会就某个“问题”达成一致时,解决方案不是在代码中添加奇怪的注释,而是在~/.pylintrc. (pylint --generate-rcfile将输出一个示例配置文件,您可以自己编辑该文件。)在那里,您可以设置:

  • 故意未使用的变量的正则表达式:dummy-variables-rgx=_$|__$

  • 变量、类和常量名称的正则表达式:function-rgx=[a-z_][a-z0-9_]{0,30}$

  • 静默单个警告或整个消息类别(“IRCWEF”之一):disable=I0011,W0142,R

~/.pylintrc这是我发现你可以禁用某些东西的唯一I0011: "Locally disabling %s"方法 --- 比如 " ,因为本地静音 I0011 本身会生成另一个 I0011 消息(这完全是虐待狂)。

对于项目,我通常创建一个单行 shell 脚本来进一步禁用我不打算修复的内容:

#!/bin/bash

pylint --output=colorized --disable=C0103 *.py | less -R -
#  :C0103 (invalid-name): *Invalid name "%s" for type %s (should match %s)*
Run Code Online (Sandbox Code Playgroud)

翻译:“我已经知道前一个家伙有他自己的命名约定,所以请不要再告诉我 8000 遍。”