Ответ
В Python геттеры создаются с помощью декоратора @property. Они позволяют обращаться к методу класса как к атрибуту, скрывая внутреннюю логику и предоставляя контролируемый доступ на чтение.
Это ключевой механизм инкапсуляции, который используется для:
- Вычисляемых свойств: Создания атрибутов, значение которых зависит от других (например,
full_nameизfirst_nameиlast_name). - Добавления логики при чтении: Например, форматирование данных перед их возвратом.
- Создания атрибутов только для чтения (read-only).
Пример:
class User:
def __init__(self, first_name, last_name):
self._first_name = first_name # Приватный атрибут
self._last_name = last_name
@property
def full_name(self): # Геттер для вычисляемого свойства
"""Возвращает полное имя пользователя."""
return f"{self._first_name} {self._last_name}".title()
# Использование
user = User("john", "doe")
# Обращение как к атрибуту, а не вызов метода user.full_name()
print(user.full_name) # Вывод: John Doe
Ключевые особенности:
- Синтаксис атрибута: Доступ к геттеру выглядит как чтение обычного атрибута (
obj.name), а не вызов метода (obj.name()). - Атрибут только для чтения: Если определить только
@propertyбез соответствующего@name.setter, атрибут станет read-only, и попытка присвоить ему значение вызоветAttributeError. - Инкапсуляция: Геттеры скрывают внутреннее представление данных (например,
_first_name) от внешнего кода, предоставляя публичный и контролируемый API.