Декораторы свойств
Часть раздела Объектно-ориентированное программирование путешествия по Python на Coddy. Урок 14 из 64.
Декораторы свойств позволяют контролировать доступ к атрибутам и их изменение, сохраняя при этом простой синтаксис атрибутов.
Вот пример класса с геттером свойства:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageИспользуй свойство как обычный атрибут:
person = Person("Alice", 30)
print(person.age)Вывод:
30Обрати внимание: ты обращаешься к age без скобок, хотя на самом деле вызываешь метод.
Добавь сеттер для проверки данных при установке значений:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueТеперь можно задать возраст с автоматической проверкой:
person = Person("Alice", 30)
person.age = 31 # Использует сеттер с проверкой
print(person.age) # Использует геттер
# Это вызвало бы ошибку:
# person.age = -5 # ValueError: возраст не может быть отрицательнымВывод:
31Создай вычисляемые свойства, которые вычисляют значения:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Вычисляет 5 * 3 = 15Вывод:
15Ключевой момент: декораторы свойств делают методы похожими на атрибуты. Используйте @property для геттеров и @attribute_name.setter для сеттеров. Это позволяет проверять данные и вычислять значения, сохраняя простой синтаксис доступа к атрибутам.
Задание
СреднеЗавершите класс Temperature в temperature.py, который выполняет преобразование между градусами Цельсия и Фаренгейта. Затем используйте этот класс в driver.py, чтобы проверить преобразование температур. Следуйте комментариям TODO в обоих файлах, чтобы выполнить инструкции шаг за шагом.
Выведите каждое преобразование в формате [celsius]°C is [fahrenheit]°F, указав значение в градусах Цельсия точно таким, каким оно было задано, а значение в градусах Фаренгейта — таким, каким его вычисляет Python. Не округляйте числа и не задавайте им формат. Две строки, которые выводит драйвер:
25°C is 77.0°F
37.0°C is 98.6°FПопробуйте сами
# TODO: Импортируйте класс Temperature из модуля temperature
# Проверьте класс:
# TODO: Создайте экземпляр температуры со значением 25°C
temp = None # Замените реальным экземпляром Temperature
# TODO: Выведите значения в градусах Цельсия и Фаренгейта
# TODO: Используйте формат: "25°C is 77.0°F" (выведите оба значения как есть, без округления и форматирования)
# TODO: Установите температуру на 98.6°F
# TODO: Выведите оба значения ещё раз, чтобы убедиться, что преобразование работает
# TODO: Используйте тот же формат, что и раньшеВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и UserСистема выдачи книгФункционал поискаИнтерфейс администратораТестирование и интеграцияПотренируйтесь самостоятельно: Онлайн-компилятор Python