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 подскажет развёрнутый ответ в реальном времени.