Как в Python создать getter для атрибута класса

«Как в Python создать getter для атрибута класса» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Python для создания getter'а (метода для получения значения) используется декоратор @property. Этот подход позволяет обращаться к методу как к обычному атрибуту, без вызова скобок (), что делает код более чистым и интуитивным.

Основная цель — инкапсулировать внутреннее состояние объекта, предоставляя контролируемый доступ к нему.

Пример:

class Account:
    def __init__(self, owner, balance):
        self.owner = owner
        self._balance = balance  # "Защищенный" атрибут

    @property
    def balance(self):
        """Это getter для атрибута _balance."""
        print("Getter called")
        return self._balance

# Использование
acc = Account("Alice", 1000)

# Обращаемся как к атрибуту, а не как к методу acc.balance()
current_balance = acc.balance 
# Вывод: Getter called

print(current_balance)
# Вывод: 1000

Ключевые моменты:

  1. Декоратор @property превращает метод balance(self) в свойство balance, доступное только для чтения.
  2. Соглашение об именовании: Внутренний атрибут часто называют с префиксом _ (например, _balance), чтобы показать, что он не предназначен для прямого доступа извне. Публичное свойство (balance) предоставляет к нему доступ.
  3. Чистый интерфейс: Если в будущем логика получения баланса усложнится (например, потребуется пересчет с учетом комиссии), интерфейс для пользователя (acc.balance) не изменится.