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