Rozdział 14 · Tworzenie rzeczywistych obiektów

Mini-projekt: kształty polimorficzne

Wspólny przodek określa interfejs, każda figura implementuje go na swój sposób — dziedziczenie i polimorfizm razem.

Mini-projekt: kształty polimorficzne

Wspólny przodek Figura przechowuje nazwę kształtu; każdy konkretny Nadpisania kształtu ploshchad() na swój sposób – dziedziczenie (14.15) i polimorfizm (14.18) razem:

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__(„krąg”)
        self.radius = radius

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


class Pryamougolnik(Figura):
    def __init__(self, width, height):
        super().__init__(„prostokąt”)
        self.width = width
        self.height = height

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


class Treugolnik(Figura):
    def __init__(self, base, height):
        super().__init__(„trójkąt”)
        self.base = base
        self.height = height

    def ploshchad(self):
        return 0.5 * self.base * self.height
Figura
Krug
Pryamougolnik
Treugolnik
Wszystkie trzy kształty są IS-A Figura, każdy redefiniuje ploshchad() na swój sposób
ispolzovanie.py
figury = [Krug(5), Pryamougolnik(4, 6), Treugolnik(8, 3)]
for f in figury:
    print(f"{f.nazvanie}: {f.ploshchad():.2f}")

# koło: 78,54
# prostokąt: 24.00
# trójkąt: 12.00
raise NotImplementedError – sygnał „zakończyć dziedzica”
Figura.ploshchad() nie oblicza celowo niczego użytecznego — istnieje jedynie, by ustawić WSPÓLNY INTERFEJS, który potomkowie muszą zaimplementować. Jeśli zapomnisz nadpisać ploshchad() w nowym kształcie, błąd zostanie wykryty natychmiast przy pierwszym wywołaniu i nie zostanie cicho podany w niewłaściwym obszarze.
★★ Zadanie samodzielne
perimetr

Dodaj Figura metodę-szkielet perimetr() (raise NotImplementedError) i zaimplementuj ją we wszystkich trzech figurach. Podpowiedź dla Treugolnik: base i height nie wystarcza do dokładnego obwodu — przyjmij go jako równoramienny i znajdź bok za pomocą twierdzenia Pitagorasa.

Praktyka: kształty polimorficzne
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →