Шаг 1 из 3+110 XP
@property
Атрибут с логикой при чтении.
@property — атрибут, который вычисляется
Что это
@property превращает метод в атрибут на чтение. Снаружи объект obj.f выглядит как обычное поле — без скобок, как len-значение, — но за кадром каждый раз выполняется код метода. Это удобно для производных значений: они всегда свежие и согласованы с состоянием объекта.
Как это читать
class C:
def __init__(self, c):
self._c = c # храним Цельсий
@property
def f(self):
return self._c * 9/5 + 32 # вычисляем Фаренгейт
print(C(100).f) # 212.0 (без скобок!)
- _c с подчёркиванием — конвенция «это внутреннее, не лезь».
- @property над def f(self) делает obj.f (а не obj.f()).
- Ты можешь спокойно поменять _c, и f тут же выдаст пересчитанное значение.
Пример
class Rectangle:
def __init__(self, w, h):
self.w, self.h = w, h
@property
def perimeter(self):
return 2 * (self.w + self.h)
r = Rectangle(3, 4)
print(r.perimeter) # 14
r.w = 10
print(r.perimeter) # 28 — автоматически пересчиталось
👍 Используй для лёгких вычислений: периметр, площадь, форматированная строка.
👎 Не прячь за @property тяжёлую работу (запрос в сеть, чтение файла) — пользователь не ожидает, что obj.x это медленная операция.