Ponowne omówienie nadpisywania metod
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 23 z 64.
Polimorfizm oznacza „wiele form” i pozwala obiektom różnych klas różnie reagować na to samo wywołanie metody. Umożliwia to nadpisywanie metod.
Oto klasa nadrzędna z metodą:
class Animal:
def speak(self):
return "Animal makes a sound"Utwórz klasy potomne, które nadpisują tę samą metodę:
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class Cow(Animal):
def speak(self):
return "Moo!"Każda klasa potomna udostępnia własną implementację speak().
Utwórz listę różnych zwierząt:
animals = [Dog(), Cat(), Cow(), Animal()]Wywołaj tę samą metodę dla wszystkich obiektów:
for animal in animals:
print(animal.speak())Wyjście:
Woof!
Meow!
Moo!
Animal makes a soundOto polimorfizm w działaniu — to samo wywołanie metody zachowuje się inaczej w zależności od rzeczywistego typu obiektu.
Możesz również używać polimorfizmu z funkcjami:
def make_animal_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_animal_speak(dog) # Hau!
make_animal_speak(cat) # Miau!Funkcja nie musi wiedzieć, jakiego typu zwierzę otrzymuje — po prostu wywołuje speak() i uzyskuje odpowiednie zachowanie.
Kluczowa kwestia: Polimorfizm pozwala traktować różne obiekty w ten sam sposób za pośrednictwem wspólnego interfejsu. Nadpisywanie metod zapewnia różne implementacje, a polimorfizm umożliwia jednolite ich wywoływanie. Dzięki temu kod jest bardziej elastyczny i łatwiejszy do rozszerzania.
Wyzwanie
ŚredniW tym wyzwaniu zaimplementujesz system dziedziczenia dla pojazdów.
Musisz edytować te pliki:
vehicle.py: Zaimplementuj bazową klasęVehiclez atrybutami make/model i metodamicar.py: Utwórz klasęCar, która dziedziczy poVehiclemotorcycle.py: Utwórz klasęMotorcycle, która dziedziczy poVehicletruck.py: Utwórz klasęTruck, która dziedziczy poVehicle
Każdy plik zawiera szczegółowe komentarze TODO, które krok po kroku pomogą Ci w implementacji. Zwróć uwagę na instrukcje importu wymagane między plikami i zachowaj relacje dziedziczenia. Plik driver.py zawiera przypadki testowe, które sprawdzą, czy Twoja implementacja działa poprawnie dla wszystkich typów pojazdów.
Spróbuj swoich sił
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck
def vehicle_info(vehicle):
return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"
# Przetestuj z różnymi pojazdami - NIE MODYFIKUJ TEGO KODU TESTOWEGO
vehicles = [
Car("Toyota", "Camry"),
Motorcycle("Harley", "Davidson"),
Truck("Ford", "F-150"),
Vehicle("Generic", "Vehicle")
]
for v in vehicles:
print(vehicle_info(v))Ta 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