Eredità Python OOP: classi padre e figlio
Impara l'ereditarietà in Python OOP. Padronanza delle sottoclassi, sovrascrittura dei metodi, utilizzo di super() e modelli di ereditarietà multipli.
Panoramica
L'ereditarietà è uno dei pilastri fondamentali della programmazione orientata agli oggetti (OOP). È un meccanismo che consente a una nuova classe (nota come figlia o sottoclasse) di adottare gli attributi e i metodi di una classe esistente (nota come genitore o superclasse). Questo modello di progettazione promuove il riutilizzo del codice, riduce la ridondanza e stabilisce relazioni logiche e gerarchiche tra i diversi componenti dell'applicazione.
Per implementare l'ereditarietà in Python, si passa il nome della classe genitore tra parentesi durante la definizione della classe figlia: `class Child(Parent):`. La classe figlia eredita immediatamente tutti i metodi e le variabili della classe genitore. Se il figlio necessita di un comportamento personalizzato, può sovrascrivere qualsiasi metodo genitore ridefinendolo con lo stesso nome. All'interno di un metodo sovrascritto, puoi comunque invocare l'implementazione del genitore utilizzando la funzione incorporata `super()`, assicurandoti di poter estendere anziché sostituire completamente la logica esistente.
A differenza di molti linguaggi tipizzati staticamente, Python supporta nativamente l'ereditarietà multipla, il che significa che una classe figlia può ereditare da più di una classe genitore (ad esempio, `class SmartDevice(Camera, Phone):`). Per risolvere quale metodo genitore viene eseguito quando i nomi sono in conflitto, Python utilizza un rigoroso algoritmo chiamato Method Risoluzione Order (MRO). Comprendere come strutturare gli alberi di ereditarietà e utilizzare super() è fondamentale per progettare architetture orientate agli oggetti estensibili.
Codice e output di esecuzione
Creazione di una classe Vehicle genitore e di una sottoclasse Car figlio che sovrascrive l'inizializzazione utilizzando super().
class Vehicle:
def __init__(self, brand, year):
self.brand = brand
self.year = year
def display_info(self):
return f"{self.year} {self.brand}"
class Car(Vehicle):
def __init__(self, brand, year, model):
# Call parent constructor
super().__init__(brand, year)
self.model = model
def display_info(self):
# Override parent method and extend it
parent_info = super().display_info()
return f"{parent_info} {self.model}"
my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())2026 Ford MustangImplementazione passo dopo passo
- Creazione di classi di eccezioni personalizzate che ereditano da Exception
- Creazione di componenti dell'interfaccia utente (come i pulsanti) che ereditano da una vista generica
- Definizione di modelli di database gerarchici (ad esempio, Utente, Dipendente, Manager)
Domande frequenti
Cosa fa super() nelle sottoclassi?
super() restituisce un oggetto temporaneo della classe genitore, permettendoti di chiamare i suoi metodi, il che è particolarmente utile per inizializzare i campi genitore in __init__.
È possibile impedire che una classe venga ereditata?
Python non supporta una parola chiave "finale" come Java per limitare l'ereditarietà. Convenzionalmente, documentiamo l'intento della classe o utilizziamo controlli di tipo con annotazioni @final dal modulo di digitazione.
Argomenti correlati
Un'introduzione completa alle classi, agli oggetti, all'ereditarietà e ai concetti OOP di Python. Crea modelli di dati robusti e scala le tue applicazioni Python.
Polimorfismo Python OOPPadroneggiare il polimorfismo in Python. Scopri come scrivere codice flessibile e liberamente accoppiato utilizzando la tipizzazione duck, l'override dei metodi e le classi base astratte.
Risorse Python consigliate
Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.
Come ordinare un elenco in Python
Scopri come ordinare un elenco in Python utilizzando il metodo sort() e la funzione sorted(). Scopri l'ordinamento delle chiavi personalizzato e gli esempi di ordine inverso.
Foglio informativo sui metodi delle stringhe Python
Una guida di riferimento completa per la manipolazione delle stringhe Python. Padroneggia la formattazione, la ricerca, la divisione, la sostituzione e il controllo delle proprietà delle stringhe.
Python vs JavaScript: quale linguaggio di programmazione è il migliore?
Un confronto completo tra Python e JavaScript. Esplora le differenze di sintassi, le prestazioni, i casi d'uso (backend e frontend) ed esempi di codifica.