Pylint为抽象类的子类生成此错误,即使这些子类本身未实例化并且在具体子类中重写了这些方法.为什么Pylint认为我的抽象子类是具体的?如何在没有敲出锤子并在rc文件中完全禁用它的情况下关闭此警告?
sth*_*ult 10
由于某种原因,pylint认为该类不是抽象的(当前检测是通过检查引发NotImplementedError的方法来完成的).#pylint: disable=W0223在模块顶部添加注释(仅用于在此模块中禁用)或类(仅在此类中),应该可以解决问题.
为了关闭错误的abstract-method警告,您可以使用超类而不是使用元类来实现抽象类abc.ABCabc.ABCMeta。
例如,此代码将引发警告:
from abc import ABCMeta, abstractmethod
class Parent:
__metaclass__ = ABCMeta
@abstractmethod
def do_something(self):
pass
class Child(Parent):
__metaclass__ = ABCMeta
Run Code Online (Sandbox Code Playgroud)
但这不会:
from abc import ABC, abstractmethod
class Parent(ABC):
@abstractmethod
def do_something(self):
pass
class Child(Parent, ABC):
pass
Run Code Online (Sandbox Code Playgroud)
警告!使用 ABC 超类和多重继承,您必须注意潜在的方法解析顺序 (MRO) 问题。