Задача курса

Python: Рефакторинг процедурного трекера задач в классы

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Рефакторинг процедурного кода в объектную модель»

Условие

Рефакторинг процедурного трекера задач в классы

Тебе дан работающий процедурный трекер задач. Твоя цель — перенести его логику в объектную модель, сохранив внешнее поведение в точности.

Что уже дано

Проверяющая система ничего не создаёт заранее. В редакторе есть:

  1. Процедурная версия трекера — функции create_task, close_task, get_open_tasks, summary и вспомогательный словарь как структура данных. Этот код нужно оставить без изменений — он используется для проверки эквивалентности.
  2. Пустой каркас класса TaskTracker с TODO-метками, который ты должен заполнить.
  3. Верхнеуровневый демонстрационный скрипт, который выполняется после твоего класса.

Весь код выполняется в одном процессе и пространстве имён. Имена TaskTracker, create_task, close_task, get_open_tasks, summary доступны на верхнем уровне после выполнения кода.

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

Реализуй класс TaskTracker на верхнем уровне модуля:

  • __init__(self) — инициализирует атрибут экземпляра tasks как пустой список; не используй атрибут класса.
  • add_task(self, title: str, priority: int) -> dict — создаёт словарь {"title": title, "priority": priority, "done": False}, добавляет его в self.tasks и возвращает его.
  • close_task(self, title: str) -> bool — находит первую задачу с указанным title, выставляет ей "done": True и возвращает True; если задача не найдена — возвращает False.
  • get_open_tasks(self) -> list[dict] — возвращает список задач, у которых done == False, отсортированный по priority по убыванию.
  • summary(self) -> dict — возвращает словарь {"total": int, "open": int, "closed": int} с количеством всех задач, открытых и закрытых.

Два разных экземпляра TaskTracker не должны разделять список tasks.

Ввод и вывод

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

Проверяющая система создаёт экземпляры TaskTracker и вызывает их методы напрямую. Она также сравнивает результаты методов с результатами процедурных функций на одинаковых данных.

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

tracker = TaskTracker()
tracker.add_task("Документация", 1)
tracker.add_task("Исправить баг", 5)
tracker.close_task("Документация")

print(tracker.summary())
print([task["title"] for task in tracker.get_open_tasks()])

Результат:

{'total': 2, 'open': 1, 'closed': 1}
['Исправить баг']

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

РешениеPython
Без регистрации · результат не сохраняется