Menu
Coddy logo textTech

Ripasso dell'override dei metodi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 23 di 64.

Il polimorfismo significa «molte forme» e consente a oggetti di classi diverse di rispondere in modo diverso alla stessa chiamata di metodo. L'override dei metodi lo rende possibile.

Ecco una classe genitore con un metodo:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Crea classi figlie che sovrascrivono lo stesso metodo:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

Ogni classe figlia fornisce la propria implementazione di speak().

Crea un elenco di animali diversi:

animals = [Dog(), Cat(), Cow(), Animal()]

Chiama lo stesso metodo su tutti gli oggetti:

for animal in animals:
    print(animal.speak())

Output:

Woof!
Meow!
Moo!
Animal makes a sound

Questo è il polimorfismo in azione: la stessa chiamata al metodo si comporta in modo diverso in base al tipo effettivo dell'oggetto.

Puoi anche usare il polimorfismo con le funzioni:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Woof!
make_animal_speak(cat)  # Meow!

La funzione non ha bisogno di sapere che tipo di animale riceve: chiama semplicemente speak() e ottiene il comportamento corretto.

Punto chiave: il polimorfismo ti permette di trattare oggetti diversi allo stesso modo tramite un’interfaccia comune. L’override dei metodi fornisce implementazioni diverse, mentre il polimorfismo ti permette di chiamarli in modo uniforme. Questo rende il codice più flessibile e facile da estendere.

challenge icon

Sfida

Medio

In questa sfida implementerai un sistema di ereditarietà per i veicoli.

Dovrai modificare questi file:

  • vehicle.py: implementa la classe base Vehicle con attributi make/model e metodi
  • car.py: crea la classe Car che eredita da Vehicle
  • motorcycle.py: crea la classe Motorcycle che eredita da Vehicle
  • truck.py: crea la classe Truck che eredita da Vehicle

Ogni file contiene commenti TODO dettagliati che ti guideranno passo dopo passo nell'implementazione. Presta attenzione alle istruzioni di importazione necessarie tra i file e rispetta le relazioni di ereditarietà. Il file driver.py contiene casi di test che verificheranno che la tua implementazione funzioni correttamente con tutti i tipi di veicoli.

Provalo tu

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"


# Testa con veicoli diversi - NON MODIFICARE QUESTO CODICE DI TEST
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Python online