non-slot-assignment (PLE0237)#
Derived from the Pylint linter.
What it does#
Checks for assignments to attributes that are not defined in __slots__
.
Why is this bad?#
When using __slots__
, only the specified attributes are allowed.
Attempting to assign to an attribute that is not defined in __slots__
will result in an AttributeError
at runtime.
Known problems#
This rule can't detect __slots__
implementations in superclasses, and
so limits its analysis to classes that inherit from (at most) object
.
Example#
class Student:
__slots__ = ("name",)
def __init__(self, name, surname):
self.name = name
self.surname = surname # [assigning-non-slot]
self.setup()
def setup(self):
pass
Use instead: