Урок 69. Практикум 17

📁 Блок: Python Fundamentals / OOP ⏱️ Время изучения: ~120 мин 🎯 Сложность: Средняя
#classmethod #staticmethod #print #str #repr #class #def #return #type #from #import #if #map #split #for #in #not #raise #try #except #as #mkdir #with #and #add #append #len

⚡ Кратко: суть урока

Практикум объединяет классы, даты из модуля datetime, классовые и статические методы, а также строковые представления объектов. Центральная задача — реализовать класс Student с валидацией возраста, автоматической нумерацией и фильтрацией по возрасту.

  • Дата рождения хранится как datetime.date и парсится из строки YYYY-MM-DD.
  • При создании объекта проверяется, что студенту не менее 16 лет, иначе — ValueError.
  • Каждый студент получает уникальный student_id через атрибут класса current_id.
  • __str__ и __repr__ отвечают за понятный вывод объектов.
  • @classmethod from_string создаёт объект из строки, @staticmethod filter_by_min_age отбирает студентов по возрасту.

Что запомнить: классовые методы работают через cls, статические — не зависят ни от объекта, ни от класса.

Частая ошибка: изменить current_id через объект вместо класса или считать возраст простым вычитанием лет.

О чём этот урок

Этот практикум — промежуточная точка между изучением атрибутов класса и объекта (Урок 68) и темой наследования (Урок 70). Вся работа вращается вокруг одного класса — Student. Мы создадим его с нуля: спарсим дату рождения, добавим валидацию возраста, настроим автоинкремент идентификаторов, реализуем строковые представления и вспомогательные методы для работы с коллекциями студентов.

Что изучим

  • Парсинг строки в datetime.date и корректный подсчёт возраста.
  • Атрибут класса current_id как источник уникальных номеров.
  • Валидацию данных в __init__ с помощью ValueError.
  • Разницу между __str__ (для пользователя) и __repr__ (для разработчика).
  • Альтернативный конструктор через @classmethod.
  • Утилитарную логику через @staticmethod.
  • Типичные ошибки: затенение классового атрибута, неверный возраст, путаница методов, мутация разделяемых списков.

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

  • ← Урок 68 — Атрибуты объекта и класса
  • Создание класса, метод __init__, параметр self, обращение к полям через точку.
  • Базовая работа со строками и списками.
  • Обработка исключений через try / except.

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