Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
3 мин
4360

Работа декоратора @property в Python

Существует ряд функциональных возможностей в Python, которые могут вызвать вопросы у новичков. Одной из таких является функция property, которую можно использовать

Освойте 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 мы можем сделать методы класса доступными как обычные атрибуты, что упрощает их использование.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий