Ответ
В 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
Ключевые моменты:
- Декоратор
@propertyпревращает методbalance(self)в свойствоbalance, доступное только для чтения. - Соглашение об именовании: Внутренний атрибут часто называют с префиксом
_(например,_balance), чтобы показать, что он не предназначен для прямого доступа извне. Публичное свойство (balance) предоставляет к нему доступ. - Чистый интерфейс: Если в будущем логика получения баланса усложнится (например, потребуется пересчет с учетом комиссии), интерфейс для пользователя (
acc.balance) не изменится.
Ответ 18+ 🔞
Да ты посмотри, какой красивый механизм, блядь! В 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
А теперь, блядь, ключевые моменты, чтобы не облажаться:
- Декоратор
@property— это волшебная палочка, сука. Он берёт методbalance(self)и превращает его в свойствоbalance, которое только читать можно. - Именование, ёпта! Внутреннюю переменную называем с подчёркиванием (
_balance), типа намёк: "не лезь сюда, нахер, напрямую". А публичное свойство (balance) — это уже цивилизованный выход к данным. - Чистота интерфейса — это сила, блядь! Захотелось тебе завтра баланс не просто отдавать, а, там, с комиссией его вычитать перед показом — так ты внутри геттера логику поменяешь, а снаружи все эти
acc.balanceбудут работать как ни в чём не бывало. Красота, в рот меня чих-пых!