@propertyДекоратор @property позволяет тебе представить метод как обычный атрибут, скрывая внутреннюю логику от вызывающего кода, при этом сохраняя интерфейс чистым и интуитивным.
Без @property ты либо выставляешь сырые атрибуты напрямую (без инкапсуляции), либо вынуждаешь вызывающий код использовать явные вызовы методов вроде circle.get_area(). Декоратор даёт тебе лучшее из обоих миров — инкапсуляцию плюс естественный интерфейс в стиле атрибутов.
Применение @property к методу означает, что он доступен без скобок, как обычный атрибут:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def area(self):
return 3.14159 * self._radius ** 2
c = Circle(5)
print(c.area) # Доступ как к атрибуту, а не как к методу
_radius) остаются защищёнными и не доступны напрямую@property без изменения вызывающего кодаТы можешь скомбинировать @property с сеттером, используя @<name>.setter, чтобы добавить логику валидации или преобразования при присваивании:
@area.setter
def radius(self, value):
if value < 0:
raise ValueError("Radius cannot be negative")
self._radius = value
@property — это Pythonic способ реализовать контролируемый доступ к атрибутам — он сохраняет публичный интерфейс простым, позволяя при этом добавлять логику, валидацию или вычисления под капотом.
Декоратор @property позволяет обращаться к методу без скобок, предоставляя интерфейс, похожий на атрибут, при этом скрывая внутреннюю логику.
Новый — ещё не проверен сообществом
Вы