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()
Гав!
Co widać na ekranie

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
Otwórz praktykę →