Menu
Coddy logo textTech

Dziedziczenie wielokrotne

Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 20 z 64.

Dziedziczenie wielokrotne pozwala klasie dziedziczyć po więcej niż jednej klasie nadrzędnej, łącząc funkcjonalności z różnych źródeł.

Oto dwie klasy nadrzędne:

class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        return f"{self.name} is eating"

class Flyable:
    def fly(self):
        return f"{self.name} is flying"

Utwórz klasę potomną, która dziedziczy po obu klasach nadrzędnych:

class Bird(Animal, Flyable):
    def __init__(self, name, species):
        super().__init__(name)  # Wywołuje metodę __init__ klasy Animal
        self.species = species
    
    def sing(self):
        return f"{self.name} is singing"

Składnia class Bird(Animal, Flyable): oznacza, że klasa Bird dziedziczy zarówno po Animal, jak i po Flyable.

Utwórz obiekt ptaka i użyj metod z obu klas nadrzędnych:

sparrow = Bird("Sparrow", "House sparrow")

Wywołuj metody z pierwszej klasy nadrzędnej:

print(sparrow.eat())

Wywołaj metody z drugiej klasy nadrzędnej:

print(sparrow.fly())

Wywołaj własną metodę ptaka:

print(sparrow.sing())

Wynik:

Sparrow is eating
Sparrow is flying
Sparrow is singing

Możesz sprawdzić kolejność dziedziczenia:

print(Bird.__mro__)  # Kolejność rozstrzygania metod

To pokazuje, który rodzic jest sprawdzany jako pierwszy podczas wyszukiwania metod.

Kluczowa informacja: Dziedziczenie wielokrotne wykorzystuje składnię class Child(Parent1, Parent2):. Klasa potomna otrzymuje wszystkie metody ze wszystkich klas nadrzędnych. Python sprawdza klasy nadrzędne od lewej do prawej podczas wyszukiwania metod.

challenge icon

Wyzwanie

Średni

W tym wyzwaniu zaimplementujesz system klas składający się z wielu plików, który demonstruje wielokrotne dziedziczenie na przykładzie smartfonów. Każda klasa znajduje się w osobnym pliku, co ułatwia organizację kodu.

Musisz edytować te pliki:

  • device.py — zaimplementuj klasę bazową Device
  • internet.py — zaimplementuj klasę bazową Internet
  • smartphone.py — zaimplementuj klasę Smartphone, która dziedziczy po obu klasach bazowych
  • driver.py — zaimplementuj przypadki testowe, które sprawdzą, czy Twoja implementacja działa poprawnie

Każdy plik zawiera szczegółowe komentarze TODO, które krok po kroku przeprowadzą Cię przez implementację.

Spróbuj swoich sił

# TODO: Zaimportuj klasę Smartphone z pliku smartphone.py

# Utwórz smartfon i przetestuj jego metody
# TODO: Utwórz obiekt Smartphone marki "Apple" i modelu "iPhone 13"
my_phone = None

# TODO: Wywołaj metodę power_on() smartfona i wypisz jej wynik

# TODO: Wywołaj metodę connect() smartfona i wypisz jej wynik

# TODO: Wywołaj metodę make_call() smartfona z parametrem "123-456-7890" i wypisz jej wynik
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Python online