Что такое сеттер в Python и для чего он используется

Ответ

Сеттер (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)