Инкапсуляция
Инкапсуляция - это принцип объектно-ориентированного программирования, который заключается в скрытии деталей реализации от внешнего мира и предоставлении интерфейса для взаимодействия с объектом.
- что всё это значит и для чего этого вообще нужуно?
Ответ на этот вопрос хорошо ответит картинка ниже.

Пожалуй это лучшая иллюстрация понятия инкапсуляции. Данный объект часы нужен для получения текущего времени, время на часах можно настроить несколькими способами.
- Открыть крышку часов и покрутить шестерёнки (это может привести к поломке).
- Использовать специальный винт (безопасно).
Если вдуматься мы пользуемся многими вещами не вникая в то, как именно эти вещи работают.
В данном примере часы. Нам не важно как именно они работают, нам важен факт того, что мы можем получить информацию о текущем времени. Для получения времени мы смотрим на дисплей, для изменения времени мы крутим винт.
Возьмём другой пример "электрочайник", это устройство позволяет изменить температуру воды. Опять же, нам не важно как, нам важно, что вода была холодной, а стала горячей. Для изменения температуры воды мы нажимаем кнопку, хотя могли бы разобрать чайник и замкнуть контакты нагревателя напрямую, но в этом случае есть вероятность получить удар током.
В программировании всё точно так-же. У объектов имеются атрибуты, к некоторым из этих атрибутов нужно закрыть доступ, чтобы напрямую нельзя было менять значение. Как это сделать? Давайте разбираться - это просто!
Сокрытие данных
В Python сокрытие данных реализуется с помощью приватных атрибутов и методов. Для этого используется префикс __
(двойное подчеркивание).
Приватные атрибуты недоступны напрямую извне класса. Они могут быть использованы только внутри класса.
Попытка доступа к приватному атрибуту извне класса вызовет ошибку.
Геттеры и сеттеры
Геттеры и сеттеры — это методы, которые предоставляют контролируемый доступ к приватным атрибутам.
Пример геттера и сеттера:Теперь доступ к балансу осуществляется только через методы.
Свойства (property)
В Python для удобства работы с геттерами и сеттерами используются свойства (декоратор @property
). Это позволяет обращаться к методам как к атрибутам.
@property
:
Создадим свойство balance
, которое будет управлять доступом к приватному атрибуту __balance
Теперь доступ к балансу осуществляется как к атрибуту, но с контролем.
Преимущества инкапсуляции
- Сокрытие реализации: Внутренняя реализация класса скрыта от внешнего мира.
- Контроль доступа: Данные защищены от некорректного изменения.
- Гибкость: Легко изменить внутреннюю реализацию, не затрагивая внешний код.
Пример использования инкапсуляции
Рассмотрим класс Person
, который инкапсулирует данные о человеке (имя и возраст) и предоставляет контролируемый доступ к ним.
Инкапсуляция — это важный принцип ООП, который позволяет объединять данные и методы в одном классе, скрывать внутреннюю реализацию и предоставлять контролируемый доступ к данным. В Python инкапсуляция реализуется через приватные атрибуты, геттеры, сеттеры и свойства.
Для более глубокого понимания принципа инкапсуляции, выполняйте практические задания.