Что такое __slots__
Этот вопрос проверяет понимание механизма __slots__ в Python, который используется для оптимизации использования памяти, предотвращая создание словаря для хранения атрибутов класса.
Короткий ответ
__slots__ — это специальный атрибут класса, который ограничивает набор атрибутов, которые можно присваивать экземплярам этого класса. Он помогает экономить память, исключая создание словаря для хранения атрибутов объектов.
Длинный ответ
По умолчанию, в Python для каждого экземпляра класса создаётся словарь, который хранит его атрибуты. Это удобно, но требует памяти. Если необходимо существенно сократить использование памяти, можно использовать __slots__, чтобы ограничить список атрибутов, которые могут быть у экземпляра класса.
Когда используется __slots__, для каждого объекта будет выделено меньше памяти, так как не создаётся стандартный словарь атрибутов. Вместо этого создаётся фиксированное количество слотов для атрибутов, что уменьшает overhead.
Пример:
class Point:
__slots__ = ['x', 'y'] # Только x и y могут быть атрибутами
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y) # 1 2
# p.z = 3 # Ошибка: 'Point' object has no attribute 'z'
__slots__ помогает сэкономить память, но ограничивает гибкость, так как нельзя динамически добавлять атрибуты к объектам.