Задача курса

Инкапсуляция и property в Python: исправьте класс температуры

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Инкапсуляция: соглашения, name mangling, property и защита инвариантов»

Условие

Исправь класс с температурой

Что уже дано

В редакторе уже находится класс Temperature с готовым getter свойства celsius, но конструктор обходит проверку, а setter и метод set_celsius не дописаны. Это код, который нужно исправить на месте; проверяющая система не передаёт готовый объект до запуска решения.

Что нужно сделать

Исправьте класс так, чтобы:

  • температура хранилась только во внутреннем атрибуте _celsius;
  • конструктор __init__ устанавливал значение через публичное свойство celsius;
  • setter celsius принимал значение не ниже -273.15, а для меньшего значения поднимал ValueError до изменения состояния объекта;
  • set_celsius(value) использовал тот же setter, а не записывал _celsius напрямую.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно. После кода ученика скрытые тесты создают Temperature(celsius), читают и присваивают obj.celsius и вызывают obj.set_celsius(value).

Пример использования

temperature = Temperature(20)
temperature.set_celsius(-5)
print(temperature.celsius)

try:
    temperature.celsius = -300
except ValueError:
    print("недопустимая температура")

Результат:

-5
недопустимая температура

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется
Инкапсуляция и property в Python: исправьте класс температуры