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





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