Ну что, еще помните для чего нужны slots? Про них все слышали, но никто не использует 😅

Идея слотов проста - каждый раз, создавая экземпляр класса питон хранит все объекты в словаре dict. У словарей есть свои накладные расходы. А если мы указываем slots, то теперь для хранения используются кортежи. Они экономнее и быстрее.

Разница в памяти около 30% на ровном месте. Есть и прирост в скорости создания экземпляров. А так же в скорости доступа к атрибутам.

Есть особенности:

  • Слоты не наследуются. У каждого дочернего класса нужно прописывать заново.
  • Нельзя динамически добавлять атрибуты в класс
  • При указании слотов пропадает поддержка слабых ссылок. Лечится добавлением weakref в слоты вручную.

Но стоит иметь ввиду, что хоть какой то смысл использовать слоты появляется только при наличии большого количества экземпляров.

Простой пример тут

#python