Задача курса
Python: Система оценки контента: ABC с двумя конкретными подклассами
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Абстрактные классы: ABC и abstractmethod»
Условие
Система оценки контента: ABC с двумя конкретными подклассами
Ты строишь мини-систему оценки контента. В ней есть абстрактный базовый класс ContentItem, задающий обязательный интерфейс, и два конкретных подкласса — Article и VideoClip.
Что уже дано
Проверяющая система ничего не создаёт заранее. В редакторе есть незавершённый каркас с TODO-метками. Весь код выполняется в одном процессе и пространстве имён.
Что нужно сделать
Определи на верхнем уровне следующие классы:
ContentItem(ABC) — абстрактный базовый класс:
- Импортируй
ABCиabstractmethodиз модуляabc. - Объяви два абстрактных метода:
summary(self) -> str— краткое описание контента;quality_score(self) -> float— оценка качества от 0.0 до 1.0.- Определи обычный (не абстрактный) метод
label(self) -> str, который возвращает строку вида"[{тип_класса}] {summary}", где{тип_класса}— имя класса объекта (type(self).__name__), а{summary}— результат вызоваself.summary().
Article — конкретный подкласс ContentItem:
__init__(self, title: str, word_count: int)— сохраняетself.titleиself.word_count.summary(self) -> str— возвращает строку вида"{title} ({word_count} слов)".quality_score(self) -> float— возвращаетmin(self.word_count / 1000, 1.0)(чем длиннее статья, тем выше балл, но не выше 1.0).
VideoClip — конкретный подкласс ContentItem:
__init__(self, title: str, duration_sec: int)— сохраняетself.titleиself.duration_sec.summary(self) -> str— возвращает строку вида"{title} ({duration_sec} сек)".quality_score(self) -> float— возвращаетmin(self.duration_sec / 300, 1.0)(чем длиннее видео, тем выше балл, но не выше 1.0).
Дополнительно, после определения классов, убедись в коде, что:
- попытка
ContentItem()поднимаетTypeError— поймай это исключение и сохрани его в переменнуюabc_error; - создай экземпляр
Articleсtitle="Python ABC"иword_count=500, сохрани в переменнуюarticle; - создай экземпляр
VideoClipсtitle="Intro"иduration_sec=120, сохрани в переменнуюclip.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система исполняет твой код, а затем скрыто проверяет верхнеуровневые имена и поведение объектов в том же пространстве имён.
Пример использования
article = Article("Python ABC", 500)
clip = VideoClip("Intro", 120)
print(article.label(), article.quality_score())
print(clip.label(), clip.quality_score())
Результат:
[Article] Python ABC (500 слов) 0.5
[VideoClip] Intro (120 сек) 0.4
