Практикум объединяет классы, даты из модуля datetime, классовые и статические методы, а также строковые представления объектов. Центральная задача — реализовать класс Student с валидацией возраста, автоматической нумерацией и фильтрацией по возрасту.
Дата рождения хранится как datetime.date и парсится из строки YYYY-MM-DD.
При создании объекта проверяется, что студенту не менее 16 лет, иначе — ValueError.
Каждый студент получает уникальный student_id через атрибут класса current_id.
__str__ и __repr__ отвечают за понятный вывод объектов.
@classmethodfrom_string создаёт объект из строки, @staticmethodfilter_by_min_age отбирает студентов по возрасту.
Что запомнить: классовые методы работают через cls, статические — не зависят ни от объекта, ни от класса.
Частая ошибка: изменить current_id через объект вместо класса или считать возраст простым вычитанием лет.
О чём этот урок
Этот практикум — промежуточная точка между изучением атрибутов класса и объекта (Урок 68) и темой наследования (Урок 70). Вся работа вращается вокруг одного класса — Student. Мы создадим его с нуля: спарсим дату рождения, добавим валидацию возраста, настроим автоинкремент идентификаторов, реализуем строковые представления и вспомогательные методы для работы с коллекциями студентов.
Что изучим
Парсинг строки в datetime.date и корректный подсчёт возраста.
Атрибут класса current_id как источник уникальных номеров.
Валидацию данных в __init__ с помощью ValueError.
Разницу между __str__ (для пользователя) и __repr__ (для разработчика).