Что такое __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__ помогает сэкономить память, но ограничивает гибкость, так как нельзя динамически добавлять атрибуты к объектам.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Python

Ключевые слова

Подпишись на Python Developer в телеграм