Ответ
Сеттер (setter) — это специальный метод в ООП, который позволяет контролировать процесс присваивания значения атрибуту объекта. Его основная задача — добавить дополнительную логику, чаще всего для валидации данных, перед их сохранением.
В Python сеттеры элегантно реализуются с помощью декоратора @property
.
Ключевые преимущества:
- Валидация данных: Гарантирует, что атрибуту присваиваются только корректные значения, предотвращая ошибки и неконсистентное состояние объекта.
- Инкапсуляция: Скрывает внутреннюю реализацию хранения данных, предоставляя контролируемый публичный интерфейс.
- Гибкость: Позволяет выполнять дополнительные действия при изменении атрибута (например, логирование, обновление связанных полей).
Пример: Валидация возраста
class User:
def __init__(self, name, age):
self.name = name
# При инициализации тоже используется сеттер
self.age = age
@property
def age(self):
# Геттер для получения значения
return self._age
@age.setter
def age(self, value):
# Сеттер с логикой проверки
if not isinstance(value, int) or value < 0:
raise ValueError("Возраст должен быть положительным целым числом")
self._age = value
# Использование
user = User("Alice", 30)
print(user.age) # 30
user.age = 31 # Корректно, сеттер отработал
print(user.age) # 31
try:
user.age = -5 # Некорректно, вызовет ValueError
except ValueError as e:
print(e)