Rozdział 14 · Tworzenie rzeczywistych obiektów
Nadpisywanie metod
Klasa dziecięca może całkowicie zastąpić metodę rodzica — lub uzupełnić ją poprzez super().
Nadpisywanie: Własna wersja metody rodzica
Podklasa może zdefiniować metodę o TYM SAMYM imieniu, co u rodzica — to nazywa się przejęcie (override). Python przy wyszukiwaniu metody znajduje wersję klasy podrzędnej pierwszą (rozdział 14.16, MRO) i używa właśnie jej:
pereopredelenie.py
class Zhivotnoe:
def zvuk(self):
print(„Jakieś zwierzę wydaje dźwięk”)
class Sobaka(Zhivotnoe):
def zvuk(self): # całkowicie zastępuje wersję nadrzędną
print(„Hau!”)
Sobaka().zvuk() # Hau! – Zhivotnoe wersja nawet nie jest nazywana
Czasami nie trzeba całkowicie zastępować zachowania rodzica, ale UZUPEŁNIĆ je — wtedy
nadpisana metoda wywołuje super().метод() i dodaje
coś własnego:
rasshirenie.py
class Zhivotnoe:
def zvuk(self):
print(„Zwierzę daje głos:”)
class Sobaka(Zhivotnoe):
def zvuk(self):
super().zvuk() # Rodzic na pierwszym miejscu
print(„Hau!”) # potem własny
Sobaka().zvuk()
# Zwierzę daje głos:
#woof!
Debug Lab 10: Zdefiniowałem na nowo metodę, ale zapomniałem rozszerzyć super()
poteryannoe_povedenie.py
class Zhivotnoe:
def zvuk(self):
print(„Zwierzę daje głos:”)
class Sobaka(Zhivotnoe):
def zvuk(self):
print(„Hau!”) # chcieli DODATKOWO, ale przypadkowo zastąpili w całości
Sobaka().zvuk()
>>> Sobaka().zvuk()
Гав!
Linia „Animal Voices:” super().zvuk() muszą być jasno wyjaśnione: Python nigdy nie nazywa samej wersji nadrodzica, chyba że sam o to poprosiłeś.
Poprawiony kod
s_rasshireniem.py
class Sobaka(Zhivotnoe):
def zvuk(self):
super().zvuk()
print(„Hau!”)
Praktyka: nadpisywanie metod
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji