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 的利益),也许这是一种更简洁的方法。
我有一个抽象基础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 的利益),也许这是一种更简洁的方法。