Задача курса
Python: Рефакторинг процедурного трекера задач в классы
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Рефакторинг процедурного кода в объектную модель»
Условие
Рефакторинг процедурного трекера задач в классы
Тебе дан работающий процедурный трекер задач. Твоя цель — перенести его логику в объектную модель, сохранив внешнее поведение в точности.
Что уже дано
Проверяющая система ничего не создаёт заранее. В редакторе есть:
- Процедурная версия трекера — функции
create_task,close_task,get_open_tasks,summaryи вспомогательный словарь как структура данных. Этот код нужно оставить без изменений — он используется для проверки эквивалентности. - Пустой каркас класса
TaskTrackerс TODO-метками, который ты должен заполнить. - Верхнеуровневый демонстрационный скрипт, который выполняется после твоего класса.
Весь код выполняется в одном процессе и пространстве имён. Имена 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}
['Исправить баг']
