Что такое __slots__

Python Middle Без компании
Что такое __slots__
Ответы
`__slots__` — это специальный атрибут класса в Python, который явно определяет фиксированный набор атрибутов (полей) для его экземпляров. Это позволяет значительно оптимизировать память и ускорить доступ к атрибутам. **Для чего это нужно?** По умолчанию у каждого объекта Python есть динамический словарь `__dict__`, который хранит все его атрибуты. Это удобно (можно добавлять любые атрибуты на лету), но неэкономно по памяти. `__slots__` заменяет `__dict__` на фиксированный набор дескрипторов, экономя память и ускоряя доступ. *Пример 1. Обычный класс (без* `__slots__`*)* ``` class RegularUser: def __init__(self, name, age): self.name = name self.age = age user1 = RegularUser('Alice', 30) user1.email = 'alice@mail.com' # Можно добавить новый атрибут print(user1.__dict__) # {'name': 'Alice', 'age': 30, 'email': 'alice@mail.com'} ``` #### *Пример 2. Класс со* `__slots__` ``` class SlotsUser: __slots__ = ('name', 'age') # Явно указываем допустимые атрибуты def __init__(self, name, age): self.name = name self.age = age user2 = SlotsUser('Bob', 25) # user2.email = 'bob@mail.com' # Вызовет ошибку: AttributeError print(user2.name) # Работает ``` ### **Преимущества** `__slots__` **- Экономия памяти** (главная причина) Объекты со `__slots__` не создают словарь `__dict__`, что особенно важно при создании тысяч экземпляров. **- Более быстрый доступ к атрибутам** Прямой доступ через дескрипторы работает быстрее, чем поиск в словаре. **- Защита от опечаток в именах атрибутов** Если попытаться присвоить значение несуществующему атрибуту, возникнет исключение.