Что делает декоратор property

Декоратор который позволяет превратить метод в свойство, чтобы предоставить управляемым атрибутам возможность и для чтения, и для записи.

class Square:
    def __init__(self, side):
        self.side = side

    @property
    def side(self):
        return self._side

    @side.setter
    def side(self, value):
        self._side = float(value)

    @property
    def area(self):
        return self.side ** 2

    @area.setter
    def area(self, value):
        self.side = value ** 0.5

 

Oct. 10, 2023, Источник

Декоратор `property` используется для создания вычисляемых атрибутов класса. Он позволяет определить методы `getter`, `setter` и `deleter` для атрибута класса, что обеспечивает более гибкий доступ к данным объекта. Вот как работает каждый из этих методов:

1. Getter (метод получения):
   - Помеченный декоратором `@property`, представляет собой метод, который возвращает значение атрибута.
   - Вызывается при обращении к атрибуту без использования скобок или при обращении через свойство.
   
2. Setter (метод установки):
   - Помеченный декоратором `@property.setter`, представляет собой метод, который устанавливает значение атрибута.
   - Вызывается при попытке установить новое значение атрибута.
   
3. Deleter (метод удаления):
   - Помеченный декоратором `@property.deleter`, представляет собой метод, который удаляет атрибут.
   - Вызывается при использовании оператора `del` для удаления атрибута.

Вот пример использования `property`:

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:
            raise ValueError("Радиус должен быть положительным числом")
        self._radius = value
    
    @radius.deleter
    def radius(self):
        del self._radius

# Использование
c = Circle(5)
print(c.radius)  # Вывод: 5
c.radius = 10
print(c.radius)  # Вывод: 10
del c.radius
# print(c.radius)  # Вызовет AttributeError, так как атрибут удален

В этом примере метод `radius()` используется как getter, `radius.setter` используется для установки нового значения атрибуту, а `radius.deleter` используется для удаления атрибута.

Feb. 16, 2024, easyoffer