Объектно-ориентированное программирование

Наследование, super() и переопределение методов

Содержание курса

Иерархия транспорта: наследование, super() и переопределение

Тебе нужно построить небольшую иерархию классов для описания транспортных средств: базовый класс и два подкласса, каждый из которых расширяет родителя через super() и переопределяет метод.

Что уже дано

Проверяющая система ничего не создаёт заранее. В редакторе есть незавершённый каркас с тремя классами и TODO-местами. Весь код выполняется в одном процессе и пространстве имён.

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

Определи три класса на верхнем уровне:

Vehicle — базовый класс:

  • __init__(self, make: str, year: int) — сохраняет self.make и self.year.
  • describe(self) -> str — возвращает строку вида "{make} ({year})", например "Toyota (2020)".
  • fuel_type(self) -> str — возвращает строку "unknown".

ElectricCar(Vehicle) — подкласс для электромобилей:

  • __init__(self, make: str, year: int, range_km: int) — вызывает super().__init__(make, year) и дополнительно сохраняет self.range_km.
  • describe(self) -> str — вызывает super().describe() и добавляет к строке ", range: {range_km} km", например "Toyota (2020), range: 400 km".
  • fuel_type(self) -> str — возвращает "electric".

DieselTruck(Vehicle) — подкласс для дизельных грузовиков:

  • __init__(self, make: str, year: int, payload_tons: float) — вызывает super().__init__(make, year) и дополнительно сохраняет self.payload_tons.
  • describe(self) -> str — вызывает super().describe() и добавляет ", payload: {payload_tons}t", например "Volvo (2018), payload: 12.5t".
  • fuel_type(self) -> str — возвращает "diesel".

Ввод и вывод

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

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

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

vehicles = [
    ElectricCar("Volt", 2025, 600),
    DieselTruck("Atlas", 2020, 8.5),
]
for vehicle in vehicles:
    print(vehicle.describe(), "—", vehicle.fuel_type())

Результат:

Volt (2025), range: 600 km — electric
Atlas (2020), payload: 8.5t — diesel
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

РешениеPython · Python 3.12 (data: numpy, pandas, sklearn...)
Как проверяется решение

Проверяются функции и их результаты. Собственный запуск выполняет ваш код без авторских тестов. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.