Easyproperty
Что такое @property и как работает?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
@property — декоратор для computed attribute с геттером/сеттером. property — это дескриптор (с __get__/__set__).
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def area(self): # computed attribute
return 3.14 * self._radius ** 2
@property
def radius(self):
return self._radius
@radius.setter # валидация в setter
def radius(self, value):
if value < 0:
raise ValueError('radius must be non-negative')
self._radius = value
c = Circle(5)
c.area # 78.5 (без скобок)
c.radius = 10 # через setter с валидацией- Применения: инкапсуляция, computed fields, валидация в setter, backward compatibility;
- Read-only: только getter;
@cached_property— lazy, кэшированный (хранит вinstance.__dict__);- В Python не Java-style get/set boilerplate — обычно просто public attribute, property если нужна логика.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.