Vytvořme nový Python program a programujme podle následujících pokynů:
Vozidlo s atributy znacka a model a
metodou info(), která vypíše informace o vozidle.Auto, která dědí z Vozidlo a přidává atribut
pocet_dveri.info() ve třídě Auto, aby vypisovala i počet
dveří.Auto a zavolejte metodu info().Uvar s metodou obsah(), která vrátí 0 (nebo vyvolá
výjimku NotImplementedError).Ctverec a Kruh, které dědí z Utvar.
obsah() pro Ctverec (strana * strana) a
Kruh (pi * polomer^2).Pes,
Kocka, Kachna), která mají metodu zvuk().zvuk(), aniž byste
zjišťovali, o jaký konkrétní druh zvířete se jedná.import math
# 1. Základní dědičnost
class Vozidlo:
def __init__(self, znacka, model):
self.znacka = znacka
self.model = model
def info(self):
return f"Vozidlo: {self.znacka} {self.model}"
class Auto(Vozidlo):
def __init__(self, znacka, model, pocet_dveri):
super().__init__(znacka, model)
self.pocet_dveri = pocet_dveri
def info(self):
return f"Auto: {self.znacka} {self.model}, Dveře: {self.pocet_dveri}"
moje_auto = Auto("Škoda", "Octavia", 5)
print(moje_auto.info())
# 2. Přepisování metod
class Utvar:
def obsah(self):
raise NotImplementedError("Tato metoda musí být implementována v potomkovi")
class Ctverec(Utvar):
def __init__(self, strana):
self.strana = strana
def obsah(self):
return self.strana ** 2
class Kruh(Utvar):
def __init__(self, polomer):
self.polomer = polomer
def obsah(self):
return math.pi * (self.polomer ** 2)
ctverec = Ctverec(5)
kruh = Kruh(3)
print(f"Obsah čtverce: {ctverec.obsah()}")
print(f"Obsah kruhu: {kruh.obsah():.2f}")
# 3. Polymorfismus
class Pes:
def zvuk(self):
return "Haf"
class Kocka:
def zvuk(self):
return "Mňau"
class Kachna:
def zvuk(self):
return "Kach kach"
zvirata = [Pes(), Kocka(), Kachna()]
print("\nZvuky zvířat:")
for zvire in zvirata:
print(zvire.zvuk())