Глава 14 · Создаём объекты реального мира

Мини-проект: полиморфные фигуры

Общий предок задаёт интерфейс, каждая фигура реализует его по-своему — наследование и полиморфизм вместе.

Мини-проект: полиморфные фигуры

Общий предок Figura хранит имя фигуры; каждая конкретная фигура переопределяет ploshchad() по-своему — наследование (14.15) и полиморфизм (14.18) вместе:

figury.py
class Figura:
    def __init__(self, nazvanie):
        self.nazvanie = nazvanie

    def ploshchad(self):
        raise NotImplementedError


class Krug(Figura):
    def __init__(self, radius):
        super().__init__("круг")
        self.radius = radius

    def ploshchad(self):
        return 3.14159 * self.radius ** 2


class Pryamougolnik(Figura):
    def __init__(self, width, height):
        super().__init__("прямоугольник")
        self.width = width
        self.height = height

    def ploshchad(self):
        return self.width * self.height


class Treugolnik(Figura):
    def __init__(self, base, height):
        super().__init__("треугольник")
        self.base = base
        self.height = height

    def ploshchad(self):
        return 0.5 * self.base * self.height
Figura
Krug
Pryamougolnik
Treugolnik
Все три фигуры — IS-A Figura, каждая переопределяет ploshchad() по-своему
ispolzovanie.py
figury = [Krug(5), Pryamougolnik(4, 6), Treugolnik(8, 3)]
for f in figury:
    print(f"{f.nazvanie}: {f.ploshchad():.2f}")

# круг: 78.54
# прямоугольник: 24.00
# треугольник: 12.00
raise NotImplementedError — сигнал «доделай в наследнике»
Figura.ploshchad() намеренно не вычисляет ничего полезного — она существует только чтобы задать ОБЩИЙ ИНТЕРФЕЙС, который обязаны реализовать наследники. Если забыть переопределить ploshchad() в новой фигуре, ошибка обнаружится сразу же при первом вызове, а не тихо выдаст неверную площадь.
★★ Самостоятельная задача
perimetr

Добавьте Figura метод-заглушку perimetr() (raise NotImplementedError) и реализуйте его во всех трёх фигурах. Подсказка для Treugolnik: base и height одних не хватает для точного периметра — считайте его равнобедренным и найдите боковую сторону по теореме Пифагора.

Практика: полиморфные фигуры
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →