在我们的项目中,我们使用mypy进行类型检查,使用pylint进行代码质量评估。我在静态方法的非静态继承中遇到了这些工具的组合问题,我想知道是否有更好的方式编写以下内容。
在我的情况下,我有一个抽象类,其方法应被重写,但具有无状态的默认实现:
class Base:
def hello(self, arg: int) -> int:
return arg + 5
class Derived(Base):
def __init__(self, inc: int) -> None:
self.inc = inc
def hello(self, arg: int) -> int:
return arg + self.inc
在前面的示例中,pylint抱怨本来可以用作函数的Base.hello
方法(因为它不使用self
)
Python允许我将Base.hello
方法注释为静态,如下所示:
class Base:
@staticmethod
def hello(arg: int) -> int:
return arg + 5
这修复了pylint no-self-use
警告,但触发了mypy警告Signature of "hello" incompatible with supertype "Base"
我现在使用的一个明显的解决方案是在#pylint: disable=no-self-use
定义之前放置一个Base.hello
指令,但是我想知道是否还有另一种也许更直接的方式来实现相同的行为而没有任何pylint或mypy警告。