Что такое Slots?
В Python по умолчанию каждый экземпляр класса имеет внутренний словарь __dict__, в котором хранятся все его атрибуты. Это удобно, но занимает много памяти, особенно когда создаётся множество объектов.
Механизм __slots__ позволяет предварительно определить набор допустимых атрибутов для объектов и избежать создания __dict__, тем самым экономя память и повышая производительность.
Зачем использовать __slots__?
- Оптимизация памяти
- Повышение производительности
- Ограничение атрибутов объекта
Пример:
class Person:
__slots__ = ['name', 'age']
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alex", 30)
print(p.name)
Если вы попробуете добавить p.city = "Moscow" — получите AttributeError, потому что атрибут city не указан в __slots__.
Важно помнить:
- Объекты не будут иметь __dict__, если явно не добавить его в __slots__.
- Динамически добавлять новые атрибуты нельзя.
- Сложное наследование с __slots__ требует аккуратности.
Когда использовать:
- В системах, где создаются тысячи и миллионы объектов
- В приложениях, критичных к памяти и скорости (например, веб-серверы, игры, аналитика данных)
Теги:
Присоединяйтесь к нашим курсам для углубленного изучения области ИТ. Отправьте запрос для получения подробной информации!