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.