Декоратор свойства
Часть раздела Объектно-ориентированное программирование путешествия по Python на Coddy. Урок 10 из 64.
Декоратор @property позволяет обращаться к методам как к атрибутам, предоставляя удобный способ получать и задавать значения. Это полезно для инкапсуляции: можно добавлять логику проверки или вычисляемые значения, не меняя публичный интерфейс класса.
Вот пример класса, использующего @property:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Обрати внимание, что мы используем self._radius для хранения фактического значения. Если бы мы использовали self.radius внутри геттера, он снова вызвал бы метод-геттер, что привело бы к бесконечной рекурсии.
Создай круг и получи доступ к его свойствам:
my_circle = Circle(5)Получайте доступ к свойствам как к обычным атрибутам:
print(my_circle.radius)
print(my_circle.area)Вывод:
5
78.53975Обрати внимание: при обращении к свойствам скобки () не используются — они похожи на атрибуты, но выполняют код метода.
Добавь сеттер, чтобы можно было изменять значения с проверкой:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Теперь ты можешь задать радиус как атрибут:
my_circle = Circle(5)
my_circle.radius = 10 # Использует сеттер
print(my_circle.radius) # Использует геттерВывод:
10Ключевой момент: @property позволяет методам выглядеть как атрибуты, а @property_name.setter позволяет контролировать присваивание значений, обеспечивая проверку данных и инкапсуляцию.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Введение в ООПВнешние файлыКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — простой калькулятор4Наследование
Основы наследованияФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовПовторение: иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»2Декораторы
Введение в декораторыДекоратор свойстваДекоратор статического методаДекоратор метода класса5Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур8Продвинутые концепции ООП
Композиция и наследованиеМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыПовторение — менеджер банковского счёта6Инкапсуляция
Публичные, защищённые и приватные членыМодификаторы доступаСокрытие информацииПродвинутые декораторы свойствПовторение — система учёта студентов12Проект: Система управления библиотекой
Обзор проектаКлассы книг и пользователейСистема выдачи книгФункция поискаИнтерфейс администратораТестирование и интеграцияПотренируйтесь самостоятельно: Онлайн-компилятор Python