Позволяет снизить объём памяти, потребляемой экземплярами класса, ограничивая количество атрибутов ими поддерживаемых.
По умолчанию классы используют словарь для хранения атрибутов — это позволяет модифицировать набор атрибутов объекта прямо в ходе исполнения программы. Однако такой подход оказывается затратным для объектов, набор атрибутов которых невелик и/или ограничен. Это становится особенно заметно, когда создаётся большое количество экземпляров.

Поведение по умолчанию можно изменить, задав __slots__ при определении класса. В __slots__ могут быть перечислены атрибуты для значений которых требуется зарезервировать место (с точки зрения CPython в объекте класса резервируется место для массива указателей на Python-объекты). При этом ни __dict__, ни __weakref__ для экземпляров автоматически созданы не будут (даже если в качестве значения строки указать пустую строку).

В качестве значения __slots__ может быть указана строка, объект поддерживающий итерирование, или последовательность строк с именами атрибутов, использующихся экземплярами.

Слоты реализуются при помощи создания дескриптора для каждого из перечисленных атрибутов.

    class Ordinary(object):
"""Экземпляры этого класса могут дополняться атрибутами
во время исполнения.

"""


class WithSlots(object):

__slots__ = 'static_attr'


a = Ordinary()
b = WithSlots()

a.__dict__ # {}
b.__dict__ # AttributeError

a.__weakref__ # None
b.__weakref__ # AttributeError

a.static_attr = 1
b.static_attr = 1

a.dynamic_attr = 2
b.dynamic_attr = 2 # AttributeError

Внимание
Попытки определить __slots__ для класса, наследующегося от родителя, не имеющего __slots__ не имеют смысла, по причине того что родителем будет создан __dict__.

Попытки присвоить экземпляру атрибут, который не был перечислен в __slots__ будет поднято исключение AttributeError.
+py2.3 Если требуется динамическое назначение атрибутов, следует указать в перечислении слотов '__dict__'.

Не имея атрибута __weakref__, экземпляры классов со __slots__ не поддерживают слабые ссылки на себя.
+py2.3 Если требуется поддержка слабых ссылок, следует указать в перечислении слотов '__weakref__'.

Область действия слотов ограничено классом, в котором они определены, поэтому наследники (если конечно они не определили собственные слоты) будут иметь __dict__.

Если наследники тоже определяют слоты, то в перечислении должны содержаться лишь дополнительные. В последующих версиях возможно будет реализована проверка на совпадение имён.

Непустой __slots__ не может быть использован для классов, наследующихся от встроенных типов переменной длины, например long, str и кортеж. При попытке сделать это будет поднято исключение TypeError.

Слот может принимать перечисления с «нестроками». Например, могут использоваться отображения, однако в будущих версиях значения по ключам могут быть наделены неким определённым смыслом.

+py2.6 Если назначается __class__, следует проследить, что для обоих классов определены одинаковые слоты.
Синонимы поиска: object.__slots__, object, __slots__
На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.