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 soundQuesto è 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.
Sfida
MedioIn questa sfida implementerai un sistema di ereditarietà per i veicoli.
Dovrai modificare questi file:
vehicle.py: implementa la classe baseVehiclecon attributi make/model e metodicar.py: crea la classeCarche eredita daVehiclemotorcycle.py: crea la classeMotorcycleche eredita daVehicletruck.py: crea la classeTruckche eredita daVehicle
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))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
1Fondamenti di OOP
File esterniIntroduzione a OOPClassi vs. oggettiIl parametro selfMetodiAttributiMetodo costruttore (__init__)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa funzione super()Sovrascrittura dei metodiEreditarietà multiplaOrdine di risoluzione dei metodiRiepilogo - Gerarchia dei dipendenti7Metodi speciali
Introduzione ai metodi magiciSovraccarico degli operatoriMetodi magici dei contenitoriRiepilogo - Lista personalizzata10Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello ObserverModello Strategy2Decoratori
Introduzione ai decoratoriDecoratore di proprietàDecoratore di metodo staticoDecoratore di metodo di classe5Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàMixinMetodi statici e di classeDecorator di classeContext manager11Pattern di progettazione - Parte 2
Pattern dei comandiPattern adattatorePattern decoratorePattern metodo templatePattern statoPattern composito3Proprietà delle classi
Variabili di istanza e di classeDecorator delle proprietàAttributi privatiRiepilogo - Gestore di conti bancari6Incapsulamento
Membri pubblici, protetti e privatiModificatori di accessoOccultamento delle informazioniDecorator delle proprietà: avanzatiRipasso - Sistema di registri degli studenti12Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e UtenteSistema di prestitoFunzionalità di ricercaInterfaccia amministratoreTest e integrazioneEsercitati da solo: Compilatore Python online