Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Существует ряд функциональных возможностей в Python, которые могут вызвать вопросы у новичков. Одной из таких является функция property
, которую можно использовать как встроенную функцию, так и в качестве декоратора.
Для начала рассмотрим простой пример использования property
как встроенной функции:
class MyClass: def __init__(self): self._value = None def get_value(self): return self._value def set_value(self, value): self._value = value def del_value(self): del self._value value = property(get_value, set_value, del_value, "This is 'value' property.")
Здесь property
принимает четыре аргумента: метод для получения значения (get_value
), метод для установки значения (set_value
), метод для удаления значения (del_value
) и строку документации.
Теперь рассмотрим пример использования property
как декоратора:
class MyClass: def __init__(self): self._value = None @property def value(self): """This is 'value' property.""" return self._value @value.setter def value(self, value): self._value = value @value.deleter def value(self): del self._value
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
В данном примере property
используется как декоратор для функции value
. Но как создаются декораторы value.setter
и value.deleter
в этом случае?
В действительности, property
в Python это не просто функция, а так называемый дескриптор. Дескрипторы — это особые объекты, которые имеют методы __get__
, __set__
и __delete__
. Метод __get__
вызывается при доступе к значению атрибута, __set__
— при присваивании значения атрибуту, а __delete__
— при удалении атрибута.
Когда property
используется как декоратор, он возвращает новый объект свойства с методом __get__
, который связан с декорируемой функцией. Этот новый объект свойства имеет методы setter
и deleter
, которые принимают функцию и возвращают новый объект свойства, связанный с этой функцией.
Таким образом, когда мы пишем @value.setter
, мы фактически создаем новый объект свойства с методом __set__
, связанным с функцией, которую мы декорируем. Аналогично, @value.deleter
создает новый объект свойства с методом __delete__
.
С помощью декоратора property
мы можем сделать методы класса доступными как обычные атрибуты, что упрощает их использование.
Добавить комментарий