Что такое __slots__ на уровне C-структур и почему при его использовании нельзя динамически добавлять атрибуты?

__slots__ обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без __dict__ неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.

Короткий ответ

Что ответить на собеседовании

slots обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без dict неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.

Подробный разбор

Ответ с пояснениями

slots обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без dict неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.

В CPython слот имеет смещение в памяти объекта, а class descriptor использует его при чтении и записи. Это может уменьшить память множества экземпляров, но не делает значения статически типизированными. Ограничение не абсолютное: dict может прийти от базового класса, быть явно указан в slots или появиться у наследника без slots. Для weak reference также нужна соответствующая поддержка. Детали размещения зависят от реализации Python.

Источник: raw.githubusercontent.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее