SAMOUCZEK JĘZYKA PYTHON ROZDZIAŁY   
Rozdział 8: Klasy

1: Terminologia- 2: Przestrzenie i zasięgi nazw w Pythonie- 3: Składnia definicji klasy - 4: Obiekty klasy
5: Obiekty konkretu klasy- 6: Obiekty metod- 7: Luźne uwagi - 8: Dziedziczenie- 9: Dziedziczenie wielorakie
10: Zmienne prywatne- 11: Sztuczki i chwyty - 12: Wjątki mogą być klasami

Lekcja 8: Dziedziczenie


Bez istnienia mechanizmu dziedziczenia, ta cecha języka, która określana jest mianem "klasy" nie byłaby jego warta. Poniżej podano składnię definicji klasy dziedziczącej:

class NazwaKlasyPotomnej(NazwaKlasyBazowej):
    [instrukcja-1]
    .
    .
    .
    [instrukcja-N]

Nazwa NazwaKlasyBazowej musi być zdefiniowana w zasięgu zawierającym definicję klasy pochodnej. Zamiast nazwy klasy bazowej dopuszcza się również wyrażenie. Jest to szczególnie przydatne, jeśli nazwa klasy bazowej zdefiniowana jest w innym module, np.:

class NazwaKlasyPochodnej(modul.NazwaKlasyBazowej):

Wykonanie definicji klasy pochodnej następuje w taki sam sposób jak dla klasy bazowej. Klasa jest zapamiętywana w momencie stworzenia obiektu klasy. Ten mechanizm używany jest w procesie rozstrzygania odniesień do atrybutów konkretu takiej klasy: jeśli poszukiwany atrybut nie jest znajdowany w klasie, poszukiwany jest w klasie bazowej. Ta zasada stosowana jest rekurencyjnie w przypadku, gdy klasa bazowa jest pochodną innej.

W konkretyzacji takiej klasy nie ma nic szczególnego: NazwaKlasyPochodnej() tworzy nowy konkret klasy. Odniesienia do metod rozstrzygane są w następujący sposób: poszukuje się odpowiedniego atrybutu klasy, jeśli jest to konieczne, "schodzi się" z poszukiwaniem w głąb drzewa dziedziczenia. Gdy odniesienie wskazuje na obiekt funkcji, metoda uznawana jest za poprawną.

Klasy pochodne mogą przesłaniać metody ich klas bazowych. Metody nie są obsługiwane w żaden uprzywilejowany sposób, gdy wywołują inne metody tego samego konkretu klasy, a więc metoda klasy bazowej, która wywołuje metodę zdefiniowaną w tej samej klasie może uruchomić metodę swojej klasy pochodnej, która tamtą przesłania (uwaga dla programistów C++: wszystkie metody w Pythonie zachowują sie jak wirtualne).

Przesłonięcie metody w klasie pochodnej jest raczej rozszerzeniem zbioru obsługiwanych funkcji niż zastąpieniem elementu noszącego taką samą nazwę jak ta metoda. Istnieje prosty sposób wywołania metody klasy bazowej: po prostu " NazwaKlasyPodstawowej.nazwa_metody(self, argumenty)". Ten mechanizm można stosować, jeżeli klasa podstawowa zdefiniowana jest w globalnym zasięgu nazw.

Strona główna - O Pythonie - Interpreter - Samouczek - Przykłady programów - Linki