Mediumproperty

Что такое @property?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

@property — декоратор, делающий метод как attribute (доступ без скобок). Инкапсуляция: можно превратить простой attribute в computed без ломания API.

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):               # computed, без скобок
        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 с валидацией
  • Read-only: только getter (без setter);
  • @radius.deleter — deleter;
  • functools.cached_property — lazy, кэшированный после первого вызова;

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.