slots обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без dict неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.
Что такое __slots__ на уровне C-структур и почему при его использовании нельзя динамически добавлять атрибуты?
__slots__ обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без __dict__ неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
slots обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без dict неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.
В CPython слот имеет смещение в памяти объекта, а class descriptor использует его при чтении и записи. Это может уменьшить память множества экземпляров, но не делает значения статически типизированными. Ограничение не абсолютное: dict может прийти от базового класса, быть явно указан в slots или появиться у наследника без slots. Для weak reference также нужна соответствующая поддержка. Детали размещения зависят от реализации Python.
Источник: raw.githubusercontent.com.