Ответ
Инкапсуляция — это один из ключевых принципов ООП, который объединяет данные (атрибуты) и методы для их обработки в одном компоненте (классе), при этом скрывая детали реализации от внешнего мира.
Основные цели инкапсуляции:
- Сокрытие данных (Data Hiding): Защита внутреннего состояния объекта от прямого неконтролируемого доступа. Доступ к данным осуществляется только через публичные методы класса (геттеры и сеттеры).
- Предоставление публичного интерфейса: Класс определяет четкий набор публичных методов, через которые другие объекты могут с ним взаимодействовать. Внутренняя логика может меняться, но интерфейс остается стабильным.
В Python инкапсуляция реализуется через соглашения об именовании:
_variable
: Префикс_
сигнализирует, что атрибут или метод предназначен для внутреннего использования (аналогprotected
).__variable
: Двойной префикс__
включает механизм name mangling, что делает атрибут более сложным для доступа извне (аналогprivate
).
Пример:
class BankAccount:
def __init__(self, initial_balance: float):
# Приватный атрибут, доступ к которому извне затруднен
self.__balance = initial_balance
# Публичный метод для внесения средств (часть интерфейса)
def deposit(self, amount: float):
if amount > 0:
self.__balance += amount
print(f"Deposited: {amount}")
else:
print("Deposit amount must be positive.")
# Публичный метод для получения баланса (часть интерфейса)
def get_balance(self) -> float:
return self.__balance
# Использование
account = BankAccount(1000)
# Прямой доступ к __balance вызовет ошибку
# print(account.__balance) -> AttributeError
# Взаимодействие через публичный интерфейс
account.deposit(500)
print(f"Current balance: {account.get_balance()}") # Current balance: 1500
Такой подход делает код более надежным, модульным и легким для поддержки.