Выбор ответа Middle ООП и dataclasses обновлено

property с проверкой значения

Вопрос

Зачем использовать @property вместо публичного атрибута price?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Добавить проверку при чтении и записи, не меняя obj.price. property это дескриптор: obj.price вызывает геттер, obj.price = x вызывает сеттер, где можно проверить, что цена неотрицательна.

Варианты ответа

  1. Чтобы атрибут стал приватным и недоступным снаружи
  2. Чтобы атрибут хранился в классе, а не в экземпляре
  3. Чтобы ускорить доступ к атрибуту через кеш дескриптора
  4. Добавить проверку при чтении и записи, не меняя obj.priceправильный ответ

Разбор

property это дескриптор: obj.price вызывает геттер, obj.price = x вызывает сеттер, где можно проверить, что цена неотрицательна. Внешний код не меняется, поэтому в Python начинают с простых атрибутов и превращают их в property только когда нужно. Приватности это не даёт, доступ через property медленнее прямого, а значение обычно хранится в self._price экземпляра.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме