跳到内容

元组子类缺少 __slots__ (SLOT001)

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

作用

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

为什么这不好?

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

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

示例

class Foo(tuple):
    pass

建议改为

class Foo(tuple):
    __slots__ = ()

参考