PyCharm "must implement all abstract methods" 在有意抽象的子类上

PyCharm "must implement all abstract methods" on a subclass that's intentionally abstract

我有一个抽象基础class,Animal:

class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def move(self):
        raise NotImplementedError()

    @abc.abstractmethod
    def eat(self):
        raise NotImplementedError()

现在我有另一个 abc 只实现了这些方法之一:

class Bird(Animal):
    def move(self):
        print("fly")

实现缺失方法的另一个class:

class Eagle(Bird):
    def eat(self):
        print("eagle eats")

但是 PyCharm 抱怨 Bird 它 "must implement all abstract methods",而我故意希望它保持抽象状态。

我是不是遗漏了什么,或者这是一个错误?如果这只是一个错误,我可以以某种方式忽略警告吗(类似于 #noqa)?

也只需将 Bird 标记为摘要即可:

from abc import ABC

class Bird(Animal, ABC):
    def move(self):
        print("fly")

稍微考虑一下之后,实际上,我认为为此目的指定 metaclass=ABCMeta 更有意义,就像您最初所做的那样,因为从概念上讲,我们不想修改的继承层次结构Bird,而是将其标记为抽象 class(为了 PyCharm 的利益),也许这是一种更简洁的方法。