
La Sovrascrittura dei metodi in Python (overwriting)
Nella programmazione orientata agli oggetti la sovrascrittura dei metodi è nota anche come overwriting. Vediamo come realizzarlo nel linguaggio Python.
Cos'è l'overwriting? E' una tecnica che consente a una classe derivata (o sottoclasse) di rimpiazzare un metodo già definito nella sua classe base (o superclasse). Il metodo della classe base viene ignorato. Come vedremo, in Python c'è una differenza tra overwriting e overriding.
Facciamo un esempio pratico.
Definisci una classe base chiamata `Animale` con un metodo denominato `suono`:
class Animale:
def suono(self):
print('Il suono di questo animale è: ')
Ora, definisci una sottoclasse chiamata `Cane` che eredita attributi e metodi dalla classe `Animale`:
class Cane(Animale):
def suono(self):
return "Bau Bau!"
In questa implementazione, il metodo `suono` della classe `Cane` sovrascrive il metodo `suono` della classe `Animale`.
Questo è un esempio di overwriting perché il metodo della superclasse viene completamente rimpiazzato dalla nuova implementazione nella classe derivata. Non viene richiamato, né esteso.
Per capire meglio come funziona l'overwriting, crea un'istanza della classe `Cane`
cane = Cane()
Poi chiama il metodo suono() tramite l'istanza.
print(cane.suono())
Bau Bau!
Come puoi vedere, la classe `Cane` ha fornito la propria implementazione del metodo `suono`, sostituendo quella della classe base `Animale`.
Quindi, la prima definizione del metodo nella classe `Animale` è stata completamente ignorata.
Questo ha permesso alla sottoclasse di definire un comportamento specifico ex novo.
Overwriting e overriding sono la stessa cosa? Non esattamente. Sono due tecniche utili per personalizzare i metodi ereditati da una classe base ma ci sono alcune importanti differenze:
- Overwriting: La sottoclasse fornisce una nuova implementazione del metodo che sostituisce completamente quella della superclasse. Il metodo della superclasse non viene chiamato.
- Overriding: La sottoclasse può fornire una nuova implementazione del metodo e può anche richiamare il metodo della superclasse utilizzando super(), estendendo così il comportamento originale. In altre parole, nell'overriding il codice del metodo nella classe base non viene ignorato ma esteso.
Spero che questa guida abbia chiarito i concetti di overwriting e sovrascrittura.