Задача курса

Python: Класс Event с альтернативным конструктором и валидацией

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «classmethod, staticmethod и выбор между ними и обычным методом»

Условие

Класс Event с альтернативным конструктором и валидацией

Что уже дано

Проверяющая система вызывает функцию parse_event, которую вы определяете в редакторе. Никаких заранее созданных глобальных объектов нет — только вызовы функции с разными аргументами.

В редакторе дан незавершённый каркас класса Event и сигнатура функции parse_event.

Что нужно сделать

Допишите класс Event и функцию parse_event:

Класс Event:

  • __init__(self, title: str, year: int, month: int, day: int) — сохраняет четыре атрибута экземпляра: title, year, month, day.
  • Классметод from_string(cls, s: str) -> "Event" — альтернативный конструктор. Принимает строку формата "название|ГГГГ-ММ-ДД", разбирает её и возвращает новый экземпляр через cls(...). Разделитель между названием и датой — вертикальная черта |. Дату разбирайте по дефису.
  • Статический метод is_valid_month(month: int) -> bool — возвращает True, если month находится в диапазоне от 1 до 12 включительно, иначе False. Метод не обращается ни к self, ни к cls.
  • Обычный метод label(self) -> str — возвращает строку вида "название (ГГГГ)", например "Юбилей (2025)".

Функция parse_event:

parse_event(raw: str) -> dict — принимает строку того же формата "название|ГГГГ-ММ-ДД", создаёт объект Event через Event.from_string(raw), а затем возвращает словарь:

{
 "title": <строка>,
 "year": <int>,
 "month": <int>,
 "day": <int>,
 "label": <строка вида "название (ГГГГ)">,
 "month_valid": <bool>
}

Значение "month_valid" получите через Event.is_valid_month(event.month).

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система вызывает parse_event(raw), где raw — строка формата "название|ГГГГ-ММ-ДД". Функция должна вернуть словарь с ключами title, year, month, day, label, month_valid.

Пример использования

print(repr(parse_event('Юбилей|2025-01-07')))

Результат:

{'title': 'Юбилей', 'year': 2025, 'month': 1, 'day': 7, 'label': 'Юбилей (2025)', 'month_valid': True}

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется
Python: Класс Event с альтернативным конструктором и валидацией