跳到内容

不含抽象方法的抽象基类 (B024)

添加于 v0.0.118 · 相关议题 · 查看源码

源自 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()

参考