Что делает декоратор 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