Сеттеры и геттеры

В 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 превращает методы геттеров в свойства, которые можно обращаться как к атрибутам объекта без вызова метода.

Last updated