single-string-slots (PLC0205)
源自 Pylint 代码检查工具。
作用
检查分配给 __slots__
的单个字符串。
为什么这不好?
在 Python 中,__slots__
属性允许您显式定义类可以拥有的属性(实例变量)。默认情况下,Python 使用字典来存储对象的属性,这会产生一些内存开销。但是,当定义了 __slots__
时,Python 使用更紧凑的内部结构来存储对象的属性,从而节省内存。
任何字符串可迭代对象都可以分配给 __slots__
(最常见的是字符串的 tuple
)。如果将字符串分配给 __slots__
,它将被解释为单个属性名称,而不是属性名称的可迭代对象。这可能会引起混淆,因为迭代 __slots__
值的用户可能希望迭代属性序列,但实际上会迭代字符串的字符。
要在 __slots__
中使用单个字符串属性,请将字符串包装在可迭代的容器类型中,例如 tuple
。
示例
建议改为
class Person:
__slots__: tuple[str, ...] = ("name",)
def __init__(self, name: str) -> None:
self.name = name