Выбор ответа Senior ООП и dataclasses обновлено
Приоритет дескрипторов и словаря экземпляра
Вопрос
В классе есть property с именем x, и кто-то записал obj.__dict__["x"] = 5. Что вернёт obj.x?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Значение геттера: дескриптор данных важнее dict. Порядок поиска в object.getattribute: сначала дескрипторы данных в классе (у них есть set или delete, как у property), затем словарь экземпляра, затем дескрипторы без set (например, обычные функции) и атрибуты класса.
Варианты ответа
5: словарь экземпляра всегда приоритетнее классаAttributeErrorиз-за конфликта имёнx- Кортеж из обоих значений:
(5, геттер) - Значение геттера: дескриптор данных важнее
__dict__правильный ответ
Разбор
Порядок поиска в object.__getattribute__: сначала дескрипторы данных в классе (у них есть __set__ или __delete__, как у property), затем словарь экземпляра, затем дескрипторы без __set__ (например, обычные функции) и атрибуты класса. Поэтому property нельзя перекрыть записью в __dict__, а метод можно перекрыть атрибутом экземпляра.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.