В Python сеттеры (setters) и геттеры (getters) представляют собой методы, которые обеспечивают доступ к приватным атрибутам класса. Они позволяют контролировать и управлять доступом к данным объекта. Для создания сеттеров и геттеров используются декораторы @property, @<attribute>.setter и @<attribute>.deleter. Давайте рассмотрим пример:
class Person:
def __init__(self, name, age):
self._name = name # Приватный атрибут
self._age = age # Приватный атрибут
@property
def name(self):
"""Геттер для получения значения атрибута _name."""
return self._name
@name.setter
def name(self, value):
"""Сеттер для установки значения атрибута _name."""
if not isinstance(value, str):
raise ValueError("Имя должно быть строкой.")
self._name = value
@property
def age(self):
"""Геттер для получения значения атрибута _age."""
return self._age
@age.setter
def age(self, value):
"""Сеттер для установки значения атрибута _age."""
if not isinstance(value, int):
raise ValueError("Возраст должен быть целым числом.")
if value < 0:
raise ValueError("Возраст не может быть отрицательным.")
self._age = value
@age.deleter
def age(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 = 25
print(person.age) # Вывод: 25
# Удаление значения через деструктор
del person.age
В приведенном примере класс Person имеет приватные атрибуты _name и _age. Геттеры и сеттеры для этих атрибутов обеспечивают контроль над доступом и обработку значений перед установкой. Декоратор @property превращает методы геттеров в свойства, которые можно обращаться как к атрибутам объекта без вызова метода.