В Python сеттеры (setters) и геттеры (getters) представляют собой методы, которые обеспечивают доступ к приватным атрибутам класса. Они позволяют контролировать и управлять доступом к данным объекта. Для создания сеттеров и геттеров используются декораторы @property, @<attribute>.setter и @<attribute>.deleter. Давайте рассмотрим пример:
classPerson:def__init__(self,name,age): self._name = name # Приватный атрибут self._age = age # Приватный атрибут@propertydefname(self):"""Геттер для получения значения атрибута _name."""return self._name@name.setterdefname(self,value):"""Сеттер для установки значения атрибута _name."""ifnotisinstance(value, str):raiseValueError("Имя должно быть строкой.") self._name = value@propertydefage(self):"""Геттер для получения значения атрибута _age."""return self._age@age.setterdefage(self,value):"""Сеттер для установки значения атрибута _age."""ifnotisinstance(value, int):raiseValueError("Возраст должен быть целым числом.")if value <0:raiseValueError("Возраст не может быть отрицательным.") self._age = value@age.deleterdefage(self):"""Деструктор для удаления значения атрибута _age."""print(f"Удалено значение возраста для {self._name}")del self._age# Пример использованияperson =Person("Alice", 30)# Получение значения через геттерprint(person.name)# Вывод: Alice# Установка значения через сеттерperson.name ="Bob"print(person.name)# Вывод: Bob# Получение значения через геттерprint(person.age)# Вывод: 30# Установка значения через сеттерperson.age =25print(person.age)# Вывод: 25# Удаление значения через деструкторdel person.age
В приведенном примере класс Person имеет приватные атрибуты _name и _age. Геттеры и сеттеры для этих атрибутов обеспечивают контроль над доступом и обработку значений перед установкой. Декоратор @property превращает методы геттеров в свойства, которые можно обращаться как к атрибутам объекта без вызова метода.