Что такое __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__, что особенно важно при создании тысяч экземпляров.
- Более быстрый доступ к атрибутам
Прямой доступ через дескрипторы работает быстрее, чем поиск в словаре.
- Защита от опечаток в именах атрибутов
Если попытаться присвоить значение несуществующему атрибуту, возникнет исключение.

офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру