In Python, super() è una funzione integrata utilizzata per chiamare un metodo dalla classe genitore. È particolarmente utile nell'ereditarietà delle classi quando si desidera estendere o modificare il comportamento di un metodo della superclasse (classe genitore) nella sottoclasse (classe figlia). super() è anche fondamentale per una corretta inizializzazione delle sottoclassi.
Per comprendere come super() possa essere utilizzato con i metodi e l'inizializzazione delle classi, utilizziamo l'esempio di animali che emettono suoni. Creeremo una classe Animal e due sottoclassi, Dog e Cat.
class Animal: # Definisce una classe chiamata 'Animal'
def __init__(self, species):
self.species = species
def speak(self):
return 'Sounds...'
class Dog(Animal): # Definisce una sottoclasse chiamata 'Dog' che eredita da 'Animal'
def __init__(self, name):
super().__init__('Dog') # Chiama il metodo '__init__' del genitore usando 'super()'
self.name = name # Attributo aggiuntivo 'name' per 'Dog'
print(self.species) # Stamperà 'Dog'
def speak(self):
original = super().speak() # Chiama il metodo 'speak' del genitore usando 'super()'
return original + ' Woof!'
class Cat(Animal): # Definisce una sottoclasse chiamata 'Cat' che eredita da 'Animal'
def __init__(self, name):
super().__init__('Cat') # Chiama il metodo '__init__' del genitore usando 'super()'
self.name = name # Attributo aggiuntivo 'name' per 'Cat'
def speak(self):
original = super().speak() # Chiama il metodo 'speak' del genitore usando 'super()'
return original + ' Meow!'
dog = Dog('Rex') # Crea un'istanza della classe 'Dog'
cat = Cat('Fluffy') # Crea un'istanza della classe 'Cat'
print(dog.name, dog.species, dog.speak()) # Rex Dog Sounds... Woof!
print(cat.name, cat.species, cat.speak()) # Fluffy Cat Sounds... Meow!
Qui, entrambe le sottoclassi Dog e Cat utilizzano super().__init__() per chiamare il metodo __init__() dalla loro superclasse Animal. Questo assicura che ogni istanza di Dog o Cat sia inizializzata correttamente con il rispettivo nome della specie. Allo stesso modo, il metodo speak() in entrambe le sottoclassi usa super().speak() per chiamare il metodo speak() di Animal, consentendo loro di includere il suono originale dell'animale nei propri metodi speak().
Quindi, la funzione super() permette a una sottoclasse di sfruttare ed estendere il comportamento della sua superclasse. Svolge un ruolo cruciale nel migliorare la riusabilità del codice, garantendo una corretta inizializzazione delle sottoclassi e mantenendo il codice modulare e leggibile. Questo la rende uno strumento potente nella programmazione orientata agli oggetti con Python.
Sfida: Classi di Veicoli
Sei incaricato di creare classi per diversi tipi di veicoli. Queste classi dovrebbero simulare alcune proprietà e comportamenti dei veicoli nel mondo reale.
Classe Vehicle: La classe base. Dovrebbe avere i seguenti attributi:
make: represents the manufacturer of the vehicle.
model: represents the specific model of the vehicle.
year: represents the year the vehicle was manufactured.
A method named honk() that, when called, prints the string Honk!.
Classe Car: Questa classe dovrebbe ereditare dalla classe Vehicle. Dovrebbe avere tutti gli attributi e i metodi della classe Vehicle, più i seguenti:
color: represents the color of the car.
It should override the honk() method of the Vehicle class.
When called, this method should print the string Beep beep!.
Classe Bicycle: Questa classe dovrebbe anche ereditare dalla classe Vehicle. Dovrebbe avere tutti gli attributi e i metodi della classe Vehicle, ma deve sovrascrivere il metodo honk().
Quando chiamato, questo metodo dovrebbe stampare Ring ring!.
Il tuo compito è implementare queste classi e metodi.