Ответ
Сеттер в Python — это метод, который позволяет контролировать присваивание значения атрибуту. Он создается с помощью декоратора @<имя_свойства>.setter и всегда работает в паре с геттером, определенным через @property.
Основное назначение сеттеров — валидация и инкапсуляция. Они гарантируют, что атрибуту присваиваются только корректные данные, соответствующие определенным правилам.
Пример:
class Product:
def __init__(self, price):
self._price = price # Приватный атрибут
@property
def price(self): # Геттер обязателен для создания сеттера
return self._price
@price.setter
def price(self, value): # Сеттер для валидации
if value < 0:
raise ValueError("Цена не может быть отрицательной")
self._price = float(value)
# Использование
item = Product(100)
print(item.price) # 100
item.price = 150.5 # Срабатывает сеттер
print(item.price) # 150.5
# Попытка установить некорректное значение
try:
item.price = -50 # Срабатывает сеттер и вызывает исключение
except ValueError as e:
print(e) # Вывод: Цена не может быть отрицательной
Принцип работы и правила:
- Связь с
@property: Сеттер не может существовать без геттера. Декоратор@price.setterнапрямую связан со свойствомprice. - Валидация данных: Это основное применение. Перед сохранением значения в приватный атрибут (например,
_price) сеттер выполняет проверки. - Прозрачность для пользователя: Для пользователя класса присваивание значения выглядит как работа с обычным атрибутом (
item.price = 150), что делает API класса интуитивно понятным.