ООП в Python с нуля: интерактивный курс классов и объектов (20 уроков)
Данные и поведение вместе: классы, объекты и всё, что между ними
Редакция Питоники

ООП — способ держать данные и поведение вместе: класс описывает устройство, объект — живой экземпляр с состоянием. Почти всё в Python — объекты, от строки до функции, поэтому понимание классов переводит вас с уровня «пишу скрипты» на уровень «проектирую программы». В этом курсе каждый пример — настоящий исполняемый код прямо на странице.
Двадцать уроков ведут от первого класса до уверенного проектирования: конструктор __init__ и self, атрибуты класса и экземпляра, classmethod и staticmethod, инкапсуляция с _protected и __private, вычисляемые свойства @property, наследование и super(), полиморфизм и утиная типизация, абстрактные классы ABC, магические методы __str__ и __repr__, сравнение и перегрузка операторов, контекстные менеджеры, итераторы, @dataclass, декораторы, миксины и MRO, паттерны Синглтон и Фабрика — и финальный проект: библиотечный каталог на классах.
Ничего устанавливать не нужно: ООП — это чистый Python, весь код курса исполняется в браузерном интерпретаторе с проверкой вывода.
Чему научитесь
- Понимать, что такое класс, объект и экземпляр
- Писать конструкторы __init__ и объяснять self
- Различать атрибуты класса и экземпляра
- Выбирать между обычным методом, classmethod и staticmethod
- Скрывать внутренности класса: _protected и __private
- Строить вычисляемые свойства через @property
- Расширять классы наследованием и super()
- Применять полиморфизм и утиную типизацию
- Определять магические методы и перегружать операторы
- Собирать проекты на @dataclass, миксинах и паттернах
Для кого: Тем, кто знает базовый синтаксис Python (переменные, функции, списки) и хочет перейти к проектированию программ: классы вместо простыней if и функций.
- Урок 1. Классы в Python: первый объектКласс — чертёж, объект — экземпляр по этому чертежу. Создаём первый класс, вызываем методы и убеждаемся: в Python объектом является всё, включая функции.30 мин
- Урок 2. __init__ и self: как рождается объект__init__ задаёт объекту стартовое состояние, а self — это сам объект внутри его методов. Разбираем механику вызова hero.heal(30) до последней детали.30 мин
- Урок 3. Атрибуты класса и атрибуты экземпляраАтрибут класса один на всех, атрибут экземпляра — личный. Разбираем порядок поиска атрибутов и классическую ловушку общего списка — с исправлением.35 мин
- Урок 4. Методы: обычные, classmethod и staticmethodУ методов Python три лика: обычный с self, classmethod с cls и staticmethod без ничего. Строим альтернативный конструктор from_string и расставляем границы.30 мин
- Урок 5. Инкапсуляция: _protected и __privateОдно подчёркивание — договорённость, два — искажение имени. Учимся прятать детали класса за публичным интерфейсом и понимать name mangling.35 мин
- Урок 6. @property: вычисляемые атрибуты@property превращает метод в атрибут без скобок: площадь пересчитывается сама, сеттер проверяет данные. Разбираем, когда свойство излишне.35 мин
- Урок 7. Наследование: расширяем классыНаследование — способ расширять классы без переписывания: потомок получает всё от родителя, переопределяет и дополняет через super(). Родство проверяет isinstance.40 мин
- Урок 8. super() и порядок MRO: как Python ищет методыsuper() вызывает не «метод родителя», а следующий метод в порядке MRO — порядке, в котором Python ищет атрибуты по иерархии. Разбираем __mro__, расширение методов и кооперативные цепочки вызовов.30 мин
- Урок 9. Полиморфизм и утиная типизация в PythonПолиморфизм — когда разные классы отвечают на один и тот же вызов каждый по-своему, а ваш код не интересуется, чей метод выполнится. Разбираем один интерфейс, утиную типизацию и функции над разнородными объектами.30 мин
- Урок 10. Абстрактные классы: ABC и @abstractmethodАбстрактный класс объявляет контракт: какие методы обязан иметь каждый потомок, — и запрещает создавать объекты, пока контракт не выполнен. Разбираем ABC, @abstractmethod и шаблонный метод.30 мин
- Урок 11. Магические методы: __str__ и __repr__print(obj) без подготовки показывает тип и адрес в памяти. Магические методы __str__ и __repr__ позволяют самим решить, как объект превращается в строку, — человек увидит «21°C», а отладчик — Temperature(21).25 мин
- Урок 12. Сравнение объектов: __eq__ и __hash__По умолчанию == для своих классов работает как is: два одинаковых счёта оказываются «не равны». Определяем __eq__ по полям, добавляем __hash__ — и объекты работают в словарях и множествах.35 мин
- Урок 13. Перегрузка операторов: __add__ и __getitem__Плюс склеивает строки, объединяет списки и складывает числа — за каждым знаком стоит магический метод. Научим вектор складываться с вектором, плейлист — отвечать на индексы и срезы, а len() — считать элементы.35 мин
- Урок 14. Контекстные менеджеры: __enter__ и __exit__Блок with гарантирует очистку даже при ошибке — секрет в двух магических методах, __enter__ и __exit__. Превратим свои классы в контекстные менеджеры: журнал сессии, гашение исключений и транзакция с откатом.35 мин
- Урок 15. Итераторы: __iter__ и __next__Каждый for в Python под капотом вызывает iter() и next(), а о конце данных сообщает исключение StopIteration. Научим свои классы работать в цикле: сначала вручную через __iter__ и __next__, потом коротким путём — генератором с yield.35 мин
- Урок 16. @dataclass: классы без бойлерплейтаДекоратор @dataclass пишет за вас __init__, __repr__ и __eq__ по описанным полям класса. Разберём значения по умолчанию, field(default_factory) для списков, frozen=True для неизменяемых объектов и __post_init__ для производных полей.30 мин
- Урок 17. Декораторы: функции над функциямиДекоратор — функция, которая принимает функцию и возвращает новую, добавляя поведение без правки исходного кода. Соберём декоратор с нуля: от замыкания и синтаксиса @ до functools.wraps, декораторов для методов и декораторов с параметрами.40 мин
- Урок 18. Множественное наследование и миксиныPython разрешает классу нескольких родителей — и сразу отвечает на вопрос «чей метод наследовать» через линейный порядок MRO. Разберём миксины как безопасный способ множественного наследования, алмазную проблему и кооперативный super().35 мин
- Урок 19. Паттерны на классах: синглтон и фабрикаПаттерны — проверенные ответы на повторяющиеся задачи проектирования. Соберём три на чистых классах: синглтон через __new__, фабричный метод через @classmethod и стратегию скидок через полиморфизм — а заодно договоримся, когда паттерн только мешает.35 мин
- Урок 20. Проект: библиотечный каталог на классахФинальный проект курса: собираем библиотечный каталог — Book и Member как @dataclass, класс Library со связями между объектами, поиском, отчётом и магическими методами __len__ и __contains__. Всё, что вы прошли за 19 уроков, работает в одной программе.40 мин