__slots__? Про них все слышали, но никто не использует 😅Идея слотов проста - каждый раз, создавая экземпляр класса питон хранит все объекты в словаре
__dict__. У словарей есть свои накладные расходы. А если мы указываем __slots__, то теперь для хранения используются кортежи. Они экономнее и быстрее. Разница в памяти около 30% на ровном месте. Есть и прирост в скорости создания экземпляров. А так же в скорости доступа к атрибутам.
Есть особенности:
- Слоты не наследуются. У каждого дочернего класса нужно прописывать заново.
- Нельзя динамически добавлять атрибуты в класс
- При указании слотов пропадает поддержка слабых ссылок. Лечится добавлением
__weakref__ в слоты вручную.Но стоит иметь ввиду, что хоть какой то смысл использовать слоты появляется только при наличии большого количества экземпляров.
Простой пример тут
#python