property() или декоратора @property, @имя_свойства.setter, @имя_свойства.deleter, что позволяет инкапсулировать логику доступа к атрибуту, скрывая его прямое изменение.
В Python, свойство (property) - это способ управления доступом к атрибутам класса, предоставляющий механизм для инкапсуляции логики, связанной с чтением, записью и удалением атрибутов.
По сути, свойство позволяет определить специальные методы (getter, setter и deleter), которые вызываются при попытке получить значение атрибута, установить его или удалить. Это позволяет выполнять дополнительные действия, такие как:
Реализация свойств:
Свойства можно создать двумя основными способами:
@property:  Это наиболее распространенный и элегантный способ.property():  Это более низкоуровневый способ, но также полезный для понимания принципов работы свойств.Пример (использование декоратора @property):
    
class Circle:
    def __init__(self, radius):
        self._radius = radius  # Private attribute (convention)
    @property
    def radius(self):
        """Getter для атрибута radius."""
        print("Getting radius...")
        return self._radius
    @radius.setter
    def radius(self, value):
        """Setter для атрибута radius."""
        if value < 0:
            raise ValueError("Radius cannot be negative.")
        print("Setting radius...")
        self._radius = value
    @radius.deleter
    def radius(self):
        """Deleter для атрибута radius."""
        print("Deleting radius...")
        del self._radius
# Использование
c = Circle(5)
print(c.radius)  # Вызовет getter
c.radius = 10     # Вызовет setter
del c.radius      # Вызовет deleter
    
  
  Преимущества использования свойств:
В целом, свойства являются важным инструментом для создания хорошо структурированных и поддерживаемых классов в Python.