Инкапсуляция и property в Python: исправьте класс температуры
Исправь класс с температурой
Что уже дано
В редакторе уже находится класс 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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Класс, init, атрибуты экземпляра и методы — задача по Python
- Специальные методы: repr, str, eq, len — задача по Python
- Python: Каталог товаров: dataclass, NamedTuple и field(defaultfactory=...)
- Наследование, super() и переопределение методов — задача по Python
- Python: Класс Event с альтернативным конструктором и валидацией
- Python: Иерархия исключений для банковского счёта
