Ответ
В Python сеттер (метод для установки значения) создается с помощью декоратора @<имя_свойства>.setter. Он всегда используется в паре с геттером, который был объявлен через @property.
Основное назначение сеттера — добавление логики (например, валидации) при попытке присвоить новое значение атрибуту.
Пример:
class Circle:
def __init__(self, radius):
self._radius = radius # Внутренний атрибут
@property
def radius(self):
"""Getter для радиуса."""
return self._radius
@radius.setter
def radius(self, value):
"""Setter с валидацией для радиуса."""
if not isinstance(value, (int, float)) or value <= 0:
raise ValueError("Радиус должен быть положительным числом")
print(f"Setter called: new radius is {value}")
self._radius = value
# Использование
circle = Circle(5)
# Присваивание значения вызывает setter
circle.radius = 10
# Вывод: Setter called: new radius is 10
print(circle.radius) # Вызывает getter
# Вывод: 10
try:
circle.radius = -2 # Попытка присвоить некорректное значение
except ValueError as e:
print(e)
# Вывод: Радиус должен быть положительным числом
Ключевые моменты:
- Связь с геттером: Сеттер должен иметь то же имя, что и метод-геттер (
radius), а его декоратор формируется из этого имени:@radius.setter. - Автоматический вызов: Сеттер вызывается автоматически при выполнении операции присваивания:
circle.radius = 10. - Контроль данных: Это мощный инструмент для обеспечения целостности данных объекта, позволяющий отклонять некорректные значения.