Pylint W0223:Method ...在类中是抽象的......但是没有被覆盖

时间:2014-03-05 01:43:05

标签: python pylint

Pylint为抽象类的子类生成此错误,即使这些子类本身未实例化且 方法在具体子类中被重写。为什么Pylint认为我的抽象子类是具体的?如何在没有敲出锤子并在rc文件中完全禁用它的情况下关闭此警告?

2 个答案:

答案 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) 问题。