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 singingMożesz sprawdzić kolejność dziedziczenia:
print(Bird.__mro__) # Kolejność rozstrzygania metodTo 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.
Wyzwanie
ŚredniW 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ąDeviceinternet.py— zaimplementuj klasę bazowąInternetsmartphone.py— zaimplementuj klasęSmartphone, która dziedziczy po obu klasach bazowychdriver.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 wynikTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektyParametr selfMetodyAtrybutyMetoda konstruktora (__init__)Powtórzenie – prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaFunkcja super()Nadpisywanie metodDziedziczenie wielokrotneKolejność rozwiązywania metodPodsumowanie – hierarchia pracowników7Metody specjalne
Wprowadzenie do metod magicznychPrzeciążanie operatorówMagiczne metody kontenerówPowtórka – własna lista10Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy2Dekoratory
Wprowadzenie do dekoratorówDekorator propertyDekorator metody statycznejDekorator metody klasowej5Polimorfizm
Ponowne omówienie nadpisywania metodTypowanie kaczeKlasy i metody abstrakcyjneProjektowanie interfejsówPodsumowanie — kalkulator kształtów8Zaawansowane koncepcje programowania obiektowego
Kompozycja a dziedziczenieMiksyMetody statyczne i klasoweDekoratory klasMenedżery kontekstu11Wzorce projektowe, część 2
Wzorzec PolecenieWzorzec AdapterWzorzec DekoratorWzorzec Metoda szablonowaWzorzec StanWzorzec Kompozyt3Właściwości klas
Zmienne instancji a zmienne klasoweDekoratory właściwościAtrybuty prywatnePowtórzenie — menedżer kont bankowych6Hermetyzacja
Public, Protected, Private — pamięćModyfikatory dostępuUkrywanie informacjiDekoratory właściwości — zaawansowanePodsumowanie — system ewidencji uczniów12Projekt: System zarządzania biblioteką
Przegląd projektuKlasy Book i UserSystem wypożyczeńFunkcja wyszukiwaniaInterfejs administratoraTestowanie i integracjaPoćwicz samodzielnie: Kompilator Python online