Отсутствие словаря свойств в ООП в Python
У обычного объекта данные экземпляра
лежат в словаре __dict__.
При заданном __slots__ этот
словарь для экземпляра не создаётся:
значения хранятся в фиксированных
ячейках по списку имён.
Это не связано с дескриптором
и декоратором property:
речь только о том, где лежат
поля объекта.
Сделаем класс User со слотами:
class User:
__slots__ = ('name', 'age')
Создадим объект и проверим наличие
__dict__:
user = User()
user.name = 'john'
print(hasattr(user, '__dict__')) # выведет False
Прямое обращение к __dict__
тоже приведёт к ошибке:
print(user.__dict__) # ошибка AttributeError
Сделайте класс Product
с __slots__. Проверьте,
что у экземпляра нет __dict__
и что чтение __dict__
вызывает ошибку.