跳到内容

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

建议改为

class Student:
    __slots__ = ("name", "surname")

    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        self.setup()

    def setup(self):
        pass