Keď sa vám nebude páčiť chovanie niektorej metódy v nedtriede, stačí dať metódu s rovnakým menom do podtriedy:
class Maciatko(Zvieratko):
def zjedz(self, jedlo):
print(f"{self.meno}: {jedlo} mi vôbec nechutia!")
micka = Maciatko('Micka')
micka.zjedz('granule')
Niekedy sa môže stať, že potrebujeme použiť pôvodnú funkčnosť ale chceme aj niečo pridať. To môžeme spraviť pomocou špeciálnej funkcie super(), ktorá umožňuje volať metódy z nadtriedy. Napríklad:
class Maciatko(Zvieratko):
def zjedz(self, jedlo):
print(f"({self.meno} na {jedlo} chvíľu fascinovane pozerá.)")
super().zjedz(jedlo)
micka = Maciatko('Micka')
micka.zjedz('granule')
Dávajte pozor, aby ste metóde volané funkciou super() dali všetky potrebné argumenty (okrem argumentu self, tkorý sa doplní automaticky). Toto môžeme využiť tak, že pôvodný argument zmeníme a až potom ho posunieme do metódy v nadtriede.
class Hadatko(Zvieratko):
def __init__(self, meno):
jmeno = jmeno.replace('s', 'sss')
jmeno = jmeno.replace('S', 'Sss')
super().__init__(meno)
stano = Hadatko('Stanislav')
stano.zjedz('myš')
Z ukážok vidíme, že super() môžeme kombinovať so špeciálnymi metódami ako __init__.
__init__ a info().
Vytvorte podtriedu auto s vlastnosťou rok. Pomocou funkcie super() pridajte túto vlastnosť do metódy __init__ a info(). Vytvorte objekt triedy auto, vypíšte jeho vlastnosti pomocou metódy info().