non-slot-assignment (PLE0237)
源自 Pylint 代码检查工具。
作用
检查对未在 __slots__
中定义的属性的赋值。
为什么这不好?
当使用 __slots__
时,只允许使用指定的属性。尝试赋值给未在 __slots__
中定义的属性将在运行时导致 AttributeError
。
已知问题
此规则无法检测超类中的 __slots__
实现,因此将其分析限制为(最多)继承自 object
的类。
示例
class Student:
__slots__ = ("name",)
def __init__(self, name, surname):
self.name = name
self.surname = surname # [assigning-non-slot]
self.setup()
def setup(self):
pass
建议改为