📄️ Основы ООП
Объектно‑ориентированное программирование (ООП) — это способ организовывать код вокруг объектов. У объекта есть данные (свойства) и действия (методы). Так легче моделировать реальный мир можно объявлять классы, создавать экземпляры, задавать атрибуты и писать методы.
📄️ Атрибуты класса и экземпляра
Разберём, где хранить общее для всех объектов, а где — личные данные конкретного экземпляра, и как Python ищет атрибуты.
📄️ Методы: экземпляра, класса и статические
Метод — это функция внутри класса. В Python есть три удобных вида: методы экземпляра, методы класса и статические методы. Отличаются тем, что подставляется первым аргументом и какими данными метод оперирует.
📄️ Конструктор __init__ и жизненный цикл объекта
В этой статье разбираем, как создаётся объект в Python и как правильно инициализировать его данные внутри конструктора init.
📄️ Инкапсуляция по‑питоновски и @property
Инкапсуляция — это про «аккуратный доступ к данным» подчёркивания в именах, name mangling и свойства @property.
📄️ Представление объектов: __str__ и __repr__
Хорошее строковое представление объекта экономит время на отладке и делает выводы понятными. В Python за это отвечают два специальных метода:
📄️ Наследование и super()
Наследование позволяет создать новый класс на базе существующего: перенять поля и методы родителя и при необходимости изменить или расширить поведение. Это удобно, когда объекты «одного семейства» имеют общую основу, но ведут себя по‑разному.
📄️ Полиморфизм и «утиная типизация»
Полиморфизм — это когда разные объекты отвечают на один и тот же вызов по‑разному. Важно не «к какому типу он принадлежит», а «умеет ли он делать нужное действие». В Python это особенно естественно благодаря «утиной типизации»: если объект «крякает как утка» (имеет нужные методы), его можно передать туда, где ожидается «утка» — даже без наследования.
📄️ Составление (composition) вместо наследования
Наследование говорит «A — это частный случай B». Но часто правильнее сказать «A состоит из B» (has‑a). Тогда вместо наследования используем составление: один объект хранит внутри другие и делегирует им работу.
📄️ Абстрактные базовые классы (ABC) и протоколы
Абстрактные базовые классы помогают описывать «контракты» главное, чтобы у объекта были нужные методы и поля.
📄️ Dataclasses: компактные классы с данными
dataclasses упрощают создание классов‑контейнеров данных: автоматически генерируют init, repr, eq и другие методы. Меньше шаблонного кода — выше читаемость и меньше шансов на ошибки.