Урок 74. Инкапсуляция
⚡ Кратко: суть темы
Инкапсуляция — сокрытие внутреннего устройства объекта и предоставление контролируемого интерфейса для работы с ним.
- Публичные атрибуты доступны отовсюду, защищённые (
_name) — соглашение для внутреннего использования, приватные (__name) — манглируются именем класса. - Геттеры и сеттеры методами позволяют читать и изменять скрытые поля с валидацией.
@propertyделает методы похожими на атрибуты:obj.valueвместоobj.get_value().- Проверка в сеттере работает, только если через него идёт и
__init__:self.age = age, а неself.__age = age. - Дескриптор (
__get__/__set__/__set_name__) выносит одинаковую проверку для нескольких полей в отдельный класс.
Что запомнить: в Python нет настоящего запрета доступа, есть соглашения и манглирование имён. Цель — защитить данные от случайных изменений и упростить интерфейс.
Частая ошибка: забывать self. внутри метода при обращении к приватному атрибуту или пытаться прочитать obj.__value напрямую.
📖 О чём этот урок
Инкапсуляция — один из столпов объектно-ориентированного программирования. На этом уроке мы разберём, как в Python скрывать внутренние данные объекта, зачем это нужно и как правильно организовывать доступ через геттеры, сеттеры и декоратор @property.
Что изучим
- Уровни доступа: публичные, защищённые и приватные атрибуты и методы.
- Манглирование имён: как Python переименовывает приватные атрибуты в
_ClassName__attr. - Геттеры и сеттеры: ручное управление чтением и записью скрытых полей.
- Декоратор
@property: элегантный способ сделать методы похожими на атрибуты. - Read-only свойства: как разрешить только чтение значения.
- Ловушка
__init__: почему прямое присваивание приватному полю обходит проверку сеттера. - Дескрипторы:
__get__,__set__,__set_name__— одна проверка для нескольких полей и классов.
📚 Что повторить перед изучением
- ← Предыдущий урок: Практикум 18
- Классы, наследование,
super(),@staticmethod.
🎯 Что изучать дальше
- → Следующий урок: Summary session 19
- Абстрактные классы и пользовательские исключения.