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 9: Dziedziczenie wielorakie


W Pythonie występuje ograniczona forma dziedziczenia wielorakiego. Poniżej podano przykład definicji klasy dziedziczącej z wielu klas podstawowych:

class NazwaKlasyPochodnej(Bazowa1, Bazowa2, Bazowa3):
    [instrukcja-1]
    .
    .
    .
    [instrukcja-N]

Aby wyjaśnić semantykę dziedziczenia wielorakiego w Pythonie, konieczne jest poznanie zasady znajdowania odniesień atrybutów klasy. Jest to zasada "najpierw w głąb, potem na prawo". Jeśli atrybut nie zostanie znaleziony w klasie NazwaKlasyPochodnej, zostanie poszukany w Bazowa1, a potem (rekurencyjnie) w klasach bazowych klasy Bazowa1 i jeśli tam nie zostanie znaleziony, poszukiwanie zostanie przeniesione do klasy Bazowa2.

(Niektórym bardziej naturalne wydaje się być poszukiwanie nazw "w szerz" - przeszukiwanie Bazowa2 i Bazowa3 przed przeszukaniem klas bazowych klasy Bazowa1. Wymaga to jednak znajomości miejsca zdefiniowania konkretnego atrybutu (czy jest on zdefiniowany w Bazowa1 lub w jednej z jej klas bazowych), zanim można by wywnioskować konsekwencje konfilktu nazw atrybutu z klasy Bazowa2. Poszukiwanie "najpierw w głąb" nie rozróżnia atrybutów zdefiniowanych bezpośrednio od dziedziczonych).

Nieograniczone użycie dziedziczenia wielorakiego może w oczywisty sposób stać się koszmarem w procesie pielęgnacji oprogramowania, zwłaszcza że w Pythonie unikanie konfliktów nazw opiera się na umowie. Jednym ze bardziej znanych przykładów problemu z dziedziczeniem wielorakim jest sytuacja gdy dwie klasy bazowe dziedziczą z tej samej klasy - przodka. Nie wiadomo jak bardzo taka semantyka jest użyteczna w połączeniu z faktem, że mamy pojedynczą kopię "zmiennych konkretu" lub atrybutów danych wspólnej klasy bazowej.

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