Урок 74. Инкапсуляция

📁 Блок: OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#del #property #print #class #def #upper #randint #from #import #return #if #raise #is #getattr #delattr #setattr #isinstance #not #or #append #for #in #join #strip #super #startswith #staticmethod #try #except #as #read #copy #id

⚡ Кратко: суть темы

Инкапсуляция — сокрытие внутреннего устройства объекта и предоставление контролируемого интерфейса для работы с ним.

  • Публичные атрибуты доступны отовсюду, защищённые (_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__ — одна проверка для нескольких полей и классов.

📚 Что повторить перед изучением

🎯 Что изучать дальше