pylint/checkers/classes.py
def _check_in_slots(self, node):
        """ Check that the given AssignAttr node
        is defined in the class slots.
        """
        inferred = safe_infer(node.expr)
        if not isinstance(inferred, astroid.Instance):
            return

        klass = inferred._proxied
        if not has_known_bases(klass):
            return
        if "__slots__" not in klass.locals or not klass.newstyle:
            return

        slots = klass.slots()
        if slots is None:
            return
        # If any ancestor doesn't use slots, the slots
        # defined for this class are superfluous.
        if any(
            "__slots__" not in ancestor.locals and ancestor.name != "object"
            for ancestor in klass.ancestors()
        ):
            return

        if not any(slot.value == node.attrname for slot in slots):
            # If we have a '__dict__' in slots, then
            # assigning any name is valid.
            if not any(slot.value == "__dict__" for slot in slots):
                if _is_attribute_property(node.attrname, klass):
                    # Properties circumvent the slots mechanism,
                    # so we should not emit a warning for them.
                    return
                if node.attrname in klass.locals and _has_data_descriptor(
                    klass, node.attrname
                ):
                    # Descriptors circumvent the slots mechanism as well.
                    return
                if node.attrname == "__class__" and _has_same_layout_slots(
                    slots, node.parent.value
                ):
                    return
                self.add_message("assigning-non-slot", args=(node.attrname,), node=node)
def _check_in_slots(self, node):
        inferred = safe_infer(node.expr)
        if not isinstance(inferred, astroid.Instance):
            return

        klass = inferred._proxied
        if not has_known_bases(klass):
            return
        if "__slots__" not in klass.locals or not klass.newstyle:
            return

        slots = klass.slots()
        if slots is None:
            return
        # If any ancestor doesn't use slots, the slots
        # defined for this class are superfluous.
        if any(
            "__slots__" not in ancestor.locals and ancestor.name != "object"
            for ancestor in klass.ancestors()
        ):
            return

        if not any(slot.value == node.attrname for slot in slots):
            # If we have a '__dict__' in slots, then
            # assigning any name is valid.
            if not any(slot.value == "__dict__" for slot in slots):
                if _is_attribute_property(node.attrname, klass):
                    # Properties circumvent the slots mechanism,
                    # so we should not emit a warning for them.
                    return
                if node.attrname in klass.locals and _has_data_descriptor(
                    klass, node.attrname
                ):
                    # Descriptors circumvent the slots mechanism as well.
                    return
                if node.attrname == "__class__" and _has_same_layout_slots(
                    slots, node.parent.value
                ):
                    return
                self.add_message("assigning-non-slot", args=(node.attrname,), node=node)
def _check_in_slots ( self , node ) : inferred = safe_infer ( node . expr ) if not isinstance ( inferred , astroid . Instance ) : return klass = inferred . _proxied if not has_known_bases ( klass ) : return if "__slots__" not in klass . locals or not klass . newstyle : return slots = klass . slots ( ) if slots is None : return # If any ancestor doesn't use slots, the slots # defined for this class are superfluous. if any ( "__slots__" not in ancestor . locals and ancestor . name != "object" for ancestor in klass . ancestors ( ) ) : return if not any ( slot . value == node . attrname for slot in slots ) : # If we have a '__dict__' in slots, then # assigning any name is valid. if not any ( slot . value == "__dict__" for slot in slots ) : if _is_attribute_property ( node . attrname , klass ) : # Properties circumvent the slots mechanism, # so we should not emit a warning for them. return if node . attrname in klass . locals and _has_data_descriptor ( klass , node . attrname ) : # Descriptors circumvent the slots mechanism as well. return if node . attrname == "__class__" and _has_same_layout_slots ( slots , node . parent . value ) : return self . add_message ( "assigning-non-slot" , args = ( node . attrname , ) , node = node )
Check that the given AssignAttr node
        is defined in the class slots.
Check that the given AssignAttr node is defined in the class slots .