Задача курса

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

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

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