Декораторы свойств
Часть раздела Объектно-ориентированное программирование путешествия по Python на Coddy. Урок 14 из 64.
Декораторы свойств позволяют управлять доступом к атрибутам и их изменением, сохраняя простой синтаксис атрибутов.
Вот пример класса с getter свойства:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageИспользуйте property как обычный attribute:
person = Person("Alice", 30)
print(person.age)Вывод:
30Обрати внимание: ты обращаешься к age без parentheses, хотя на самом деле вызываешь метод.
Добавьте setter, чтобы проверять данные при установке values:
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Теперь можно задать age с автоматической проверкой:
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 для getter и @attribute_name.setter для setter. Это позволяет выполнять проверку данных и вычислять значения, сохраняя простой синтаксис доступа к атрибутам.
Задание
СреднеЗавершите класс Temperature в temperature.py, который converts между Celsius и Fahrenheit. Затем используйте этот класс в driver.py, чтобы протестировать преобразования temperature. Следуйте комментариям TODO в обоих файлах для пошаговых инструкций.
Выводите каждое преобразование в виде [celsius]°C is [fahrenheit]°F, при этом значение Celsius должно быть в точности таким, каким оно было задано, а значение Fahrenheit — таким, каким его вычисляет Python. Не округляйте и не форматируйте числа. Две строки, которые выводит driver:
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.0°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