跳到内容

meta-class-abc-meta (FURB180)

派生自 refurb 代码检查工具。

修复总是可用的。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查使用 metaclass=abc.ABCMeta 定义抽象基类 (ABC) 的情况。

为什么这不好?

使用 class C(ABC): ... 而不是 class C(metaclass=abc.ABCMeta): ... 来定义抽象基类。从 ABC 包装器类继承在语义上与设置 metaclass=abc.ABCMeta 相同,但更简洁。

示例

class C(metaclass=ABCMeta):
    pass

建议改为

class C(ABC):
    pass

修复安全性

如果该类具有基类,则此规则的修复是不安全的。 这是因为基类可能会验证该类的其他基类(例如,typing.Protocol 就是这样做的),或者如果添加了更多基类,则会以其他方式改变运行时行为。

参考