Sobes.tech
Back to questions
Junior — Middle
62

Какие механизмы реализованы внутри декоратора @property в Python для управления доступом к атрибутам?

Answer from AI

sobes.tech AI

Декоратор @property в Python реализует механизм управления доступом к атрибутам через методы, позволяя обращаться к ним как к обычным свойствам.

Внутри @property создаётся объект-описатель (descriptor), который реализует методы:

  • __get__ — вызывается при чтении свойства, возвращает значение через геттер.
  • __set__ — вызывается при присвоении значения, если определён сеттер.
  • __delete__ — вызывается при удалении свойства, если определён делитер.

Это позволяет инкапсулировать логику получения и установки значения, например, для валидации или вычисления на лету.

Пример:

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        if not value:
            raise ValueError("Имя не может быть пустым")
        self._name = value

p = Person("Иван")
print(p.name)  # вызовет __get__
p.name = "Пётр"  # вызовет __set__