跳到内容

no-slots-in-str-subclass (SLOT000)

派生自 flake8-slots 代码检查器。

作用

检查缺少 __slots__ 定义的 str 子类。

为什么这不好?

在 Python 中,__slots__ 属性允许您显式定义类可以拥有的属性(实例变量)。 默认情况下,Python 使用字典来存储对象的属性,这会产生一些内存开销。 但是,当定义了 __slots__ 时,Python 使用更紧凑的内部结构来存储对象的属性,从而节省内存。

str 的子类继承了内置 str 类的所有属性和方法。 由于字符串通常是不可变的,因此它们不需要 str 类提供的额外属性。 为 str 的子类定义 __slots__ 可以防止为每个实例创建字典,从而减少内存消耗。

示例

class Foo(str):
    pass

建议改为

class Foo(str):
    __slots__ = ()

参考