Menu
Coddy logo textTech

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 sound

Oto 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.

challenge icon

Wyzwanie

Średni

W tym wyzwaniu zaimplementujesz system dziedziczenia dla pojazdów.

Musisz edytować te pliki:

  • vehicle.py: Zaimplementuj bazową klasę Vehicle z atrybutami make/model i metodami
  • car.py: Utwórz klasę Car, która dziedziczy po Vehicle
  • motorcycle.py: Utwórz klasę Motorcycle, która dziedziczy po Vehicle
  • truck.py: Utwórz klasę Truck, która dziedziczy po Vehicle

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))
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