Декораторы свойств
Часть раздела Object Oriented Programming путешествия по 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: Age cannot be negativeВывод:
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 в обоих файлах для получения пошаговых инструкций.
Шпаргалка
Декораторы свойств позволяют контролировать доступ к атрибутам и их изменение, сохраняя при этом простой синтаксис атрибутов.
Используйте @property для методов-геттеров:
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) # Доступ как к атрибуту, без скобокИспользуйте @attribute_name.setter для методов-сеттеров с валидацией:
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 # Использует сеттер с валидациейСоздавайте вычисляемые свойства, которые рассчитывают значения:
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Попробуйте сами
# TODO: Импортируйте класс Temperature из модуля temperature
# Протестируйте класс:
# TODO: Создайте экземпляр температуры при 25°C
temp = None # Замените на фактический экземпляр Temperature
# TODO: Выведите значения как в градусах Цельсия, так и в градусах Фаренгейта
# TODO: Используйте формат: "25.0°C is 77.0°F"
# TODO: Установите температуру на 98.6°F
# TODO: Снова выведите оба значения, чтобы подтвердить, что преобразование работает
# TODO: Используйте тот же формат, что и раньшеВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и User