namedtuple 子类的 no-slots (SLOT002)
派生自 flake8-slots 代码检查器。
作用
检查缺少 __slots__
定义的 collections.namedtuple
或 typing.NamedTuple
子类。
为什么这不好?
在 Python 中,__slots__
属性允许您显式定义类可以拥有的属性(实例变量)。默认情况下,Python 使用字典来存储对象的属性,这会产生一些内存开销。但是,当定义了 __slots__
时,Python 会使用更紧凑的内部结构来存储对象的属性,从而节省内存。
namedtuple
的子类继承了内置 namedtuple
类的所有属性和方法。由于元组通常是不可变的,因此它们不需要 namedtuple
类提供的属性之外的额外属性。为 namedtuple
的子类定义 __slots__
可以防止为每个实例创建字典,从而减少内存消耗。
示例
建议改为