Wprowadzenie
Dziedziczenie to jedna z najważniejszych cech programowania obiektowego. Pozwala tworzyć nowe klasy na bazie już istniejących. Dzięki temu możemy unikać powtarzania kodu, rozszerzać istniejące funkcjonalności oraz lepiej organizować program.
Jeżeli klasa B dziedziczy po klasie A, oznacza to, że klasa B przejmuje jej atrybuty i metody, a także może dodawać własne.
Po co stosować dziedziczenie?
Dziedziczenie przydaje się wszędzie tam, gdzie mamy obiekty o cechach wspólnych oraz cechach dodatkowych. Przykład: – Wszystkie samochody mają markę i przebieg. – Samochód elektryczny ma także pojemność baterii. Klasa bazowa: Samochod Klasa pochodna: ElektrycznySamochod
Podstawowa składnia
class KlasaBazowa:
def metoda(self):
print("Jestem metodą z klasy bazowej.")
class KlasaPochodna(KlasaBazowa):
pass
KlasaPochodna nie ma swojej własnej metody, ale dziedziczy metodę z klasy bazowej.
Wywołanie:
ob = KlasaPochodna()
ob.metoda()
Nadpisywanie metod (override)
Klasa pochodna może zmienić zachowanie metody z klasy bazowej.
class Zwierze:
def dzwiek(self):
print("Zwierzę wydaje dźwięk")
class Pies(Zwierze):
def dzwiek(self):
print("Hau hau!")
Rozszerzanie funkcjonalności rodzica – super()
Czasem chcemy wykonać kod rodzica, ale dodać coś więcej.
class Osoba:
def __init__(self, imie):
self.imie = imie
class Student(Osoba):
def __init__(self, imie, indeks):
super().__init__(imie)
self.indeks = indeks
Super() odwołuje się do klasy bazowej.
Ćwiczenia praktyczne
Ćwiczenie 1
Utwórz klasę Pojazd z polami: marka i rok. Dodaj metodę opis(). Następnie utwórz klasę Rower, dziedziczącą po Pojazd, i dodaj do niej pole rodzaj (np. „górski”). Stwórz obiekt Rower i wywołaj metodę opis() oraz wypisz rodzaj.
Ćwiczenie 2
Napisz klasę Urządzenie z metodą wlacz(), która wypisuje tekst „Urządzenie włączone”. Utwórz klasę Laptop, która nadpisuje tę metodę wypisując: „Laptop uruchamia system…”. Sprawdź działanie obu klas.
Ćwiczenie 3
Napisz klasę Bohater z polem imie i metodą przedstaw_sie(). Napisz klasę Mag, która ma dodatkowe pole mana. Klasa Mag powinna korzystać z super() w konstruktorze. Stwórz obiekt Maga i wyświetl jego dane.
Ćwiczenie 4
Napisz klasę Figura, która ma metodę pole() wypisującą tekst ogólny, np. „Pole nieokreślone”. Utwórz klasę Kwadrat, która nadpisuje tę metodę tak, aby obliczała pole kwadratu o boku podanym podczas tworzenia obiektu.
Ćwiczenie teoretyczne
Wyjaśnij własnymi słowami, czym jest dziedziczenie w programowaniu obiektowym i dlaczego jest przydatne. Opisz też przykład z życia codziennego, który można przedstawić jako dziedziczenie obiektów.