Декораторы свойств
Часть раздела Объектно-ориентированное программирование путешествия по 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: Создать экземпляр класса Temperature со значением 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