Dziedziczenie
1. Podstawy dziedziczenia
1.1 Klasa bazowa i pochodna
Dziedziczenie pozwala tworzyć nowe klasy (klasy pochodne), które przechwytują właściwości i metody klasy bazowej, a jednocześnie mogą dodawać własne.
- Klasa bazowa (parent / superclass) – klasa, której właściwości dziedziczy klasa pochodna.
- Klasa pochodna (child / subclass) – klasa, która dziedziczy po klasie bazowej.
Przykład:
Wyjaśnienie:
Piesdziedziczy wszystkie metody i atrybuty klasyZwierze.- Dzięki
super().__init__(gatunek)konstruktor klasy bazowej jest wywoływany, co pozwala ustawić atrybutgatunek. - Klasa pochodna może mieć dodatkowe atrybuty (np.
imie).
1.2 Konstruktor w dziedziczeniu
- Jeśli klasa pochodna nie wywoła jawnie konstruktora klasy bazowej, konstruktor bazowy nie zostanie automatycznie uruchomiony.
super().__init__(...)pozwala przekazać argumenty do konstruktora klasy bazowej i zapewnić poprawne zainicjalizowanie wszystkich atrybutów.
Przykład bez super() – problem:
Dlatego zawsze warto wywołać konstruktor klasy bazowej:
2. Nadpisywanie metod (Overriding)
Nadpisywanie metod pozwala klasie pochodnej zmienić lub rozszerzyć funkcjonalność metod klasy bazowej.
2.1 Podstawowy przykład
Metoda dzwiek w klasie Pies nadpisuje metodę z klasy Zwierze.
2.2 Rozszerzanie funkcjonalności klasy bazowej
Często chcemy rozszerzyć, a nie całkowicie zastąpić metodę klasy bazowej. W tym celu używa się super():
Wyjaśnienie:
super().przedstaw_sie()wywołuje metodę z klasy bazowej.- Następnie metoda klasy pochodnej dodaje własną logikę, zachowując funkcjonalność klasy bazowej.
3. Podsumowanie – dziedziczenie i nadpisywanie
- Dziedziczenie pozwala tworzyć klasy pochodne, które odziedziczą atrybuty i metody klasy bazowej.
- Konstruktor klasy bazowej warto wywołać w klasie pochodnej przez
super().__init__(), aby poprawnie zainicjalizować obiekt. - Nadpisywanie metod (overriding) umożliwia zmianę lub rozszerzenie zachowania odziedziczonych metod.
super()jest narzędziem do odwoływania się do klasy bazowej w klasie pochodnej, co pozwala zachować i rozbudować funkcjonalność.