Перейти к содержанию

252 уроков, 17 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение

ООП в Python с нуля: интерактивный курс классов и объектов (20 уроков)

Данные и поведение вместе: классы, объекты и всё, что между ними

Редакция Питоники

20 уроков ≈ 16–22 часа Средний Бесплатно и без регистрации
ООП: интерактивные уроки с запуском кода в браузере

ООП — способ держать данные и поведение вместе: класс описывает устройство, объект — живой экземпляр с состоянием. Почти всё в 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 и функций.

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