Dziedziczenie to jedna z fundamentalnych koncepcji programowania obiektowego, umożliwiająca klasom przejmowanie atrybutów i metod z innych klas. W Pythonie mechanizm ten pozwala na tworzenie hierarchii klas, co ułatwia zarządzanie kodem i jego ponowne wykorzystanie. Ale jak dokładnie dziedziczenie funkcjonuje w Pythonie? Odpowiedź na to pytanie znajdziesz w poniższym artykule.
Przykład kodu z dziedziczeniem
Zacznijmy od przykładu, który pokaże nam dziedziczenie w akcji. Stwórzmy prostą hierarchię klas, gdzie klasa bazowa Vehicle (Pojazd) będzie dziedziczona przez klasy Car (Samochód) i Bike (Rower).
class Vehicle:
    # Konstruktor klasy bazowej
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
    # Metoda wyświetlająca informacje o pojeździe
    def display_info(self):
        print(f"Marka: {self.brand}, Model: {self.model}")
class Car(Vehicle):
    # Konstruktor klasy dziedziczącej dodaje nowy atrybut
    def __init__(self, brand, model, horsepower):
        super().__init__(brand, model)  # Wywołanie konstruktora klasy bazowej
        self.horsepower = horsepower
    # Nadpisanie metody z klasy bazowej
    def display_info(self):
        super().display_info()  # Wywołanie metody z klasy bazowej
        print(f"Moc [KM]: {self.horsepower}")
class Bike(Vehicle):
    # Konstruktor klasy dziedziczącej, bez dodatkowych atrybutów
    def __init__(self, brand, model, is_electric):
        super().__init__(brand, model)
        self.is_electric = is_electric
    # Nadpisanie metody z klasy bazowej
    def display_info(self):
        super().display_info()
        print(f"Elektryczny: {'Tak' if self.is_electric else 'Nie'}")
# Utworzenie instancji klasy Car
car = Car("Tesla", "Model S", 420)
car.display_info()
# Utworzenie instancji klasy Bike
bike = Bike("Trek", "Powerfly", True)
bike.display_info()
W tym przykładzie, klasa Vehicle jest klasą bazową z podstawowymi atrybutami brand i model, oraz metodą display_info() do wyświetlania informacji o pojeździe. Klasy Car i Bike dziedziczą z klasy Vehicle, rozszerzając jej funkcjonalność o dodatkowe atrybuty oraz nadpisując metodę display_info() w celu dostosowania wyświetlanych informacji do konkretnego typu pojazdu.
Kluczowe momenty:
- super().__init__(brand, model)– wywołanie konstruktora klasy bazowej w celu inicjalizacji wspólnych atrybutów.
- super().display_info()– wywołanie metody z klasy bazowej w celu wykorzystania jej funkcjonalności i rozszerzenia o dodatkowe informacje specyficzne dla klasy dziedziczącej.
Podsumowanie
Dziedziczenie w Pythonie umożliwia tworzenie bardziej zorganizowanego i łatwiejszego w utrzymaniu kodu poprzez współdzielenie atrybutów i metod między klasami. Dzięki wykorzystaniu super() można wywołać metody klasy bazowej w klasach dziedziczących, co pozwala na ich rozszerzenie bez konieczności duplikowania kodu.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.