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
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