跳到内容

抽象基类没有抽象方法 (B024)

源自 flake8-bugbear linter。

作用

检查没有抽象方法或属性的抽象类。带注释但未赋值的类变量被视为抽象的。

为什么这不好?

抽象基类用于定义接口。如果一个抽象基类没有抽象方法或属性,您可能忘记向该类添加抽象方法或属性,或者省略了 @abstractmethod 装饰器。

如果该类打算用作接口,请考虑从类定义中删除 ABC 基类。

示例

from abc import ABC
from typing import ClassVar


class Foo(ABC):
    class_var: ClassVar[str] = "assigned"

    def method(self):
        bar()

建议改为

from abc import ABC, abstractmethod
from typing import ClassVar


class Foo(ABC):
    class_var: ClassVar[str]  # unassigned

    @abstractmethod
    def method(self):
        bar()

参考