Декоратор property
Часть раздела Object Oriented Programming путешествия по 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Создайте круг и получите доступ к свойствам:
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 позволяет контролировать, как присваиваются значения.
Шпаргалка
Декоратор @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Обращение к свойствам без круглых скобок:
my_circle = Circle(5)
print(my_circle.radius) # 5
print(my_circle.area) # 78.53975Добавьте сеттер (setter) для управления присваиванием значений:
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Устанавливайте значения как атрибуты:
my_circle.radius = 10 # Использует сеттер
print(my_circle.radius) # Использует геттерПопробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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