Что такое инкапсуляция в ООП

Ответ

Инкапсуляция — это один из ключевых принципов ООП, который объединяет данные (атрибуты) и методы для их обработки в одном компоненте (классе), при этом скрывая детали реализации от внешнего мира.

Основные цели инкапсуляции:

  1. Сокрытие данных (Data Hiding): Защита внутреннего состояния объекта от прямого неконтролируемого доступа. Доступ к данным осуществляется только через публичные методы класса (геттеры и сеттеры).
  2. Предоставление публичного интерфейса: Класс определяет четкий набор публичных методов, через которые другие объекты могут с ним взаимодействовать. Внутренняя логика может меняться, но интерфейс остается стабильным.

В 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

Такой подход делает код более надежным, модульным и легким для поддержки.