🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

EreditarietĂ  in Python

Codegrind Team•Jul 22 2023

L’ereditarietà è un concetto chiave nella programmazione orientata agli oggetti che consente di creare nuove classi basate su classi esistenti, ereditandone attributi e metodi. Python supporta l’ereditarietà, consentendo la creazione di gerarchie di classi che condividono funzionalità comuni. Esploriamo come implementare l’ereditarietà, le sue motivazioni e come personalizzare e ampliare le classi attraverso questo meccanismo.

Definizione di EreditarietĂ 

L’ereditarietà è il processo attraverso il quale una classe figlia acquisisce gli attributi e i metodi della classe genitore. La classe genitore è spesso chiamata “superclasse” o “classe base”, mentre la classe figlia è chiamata “sottoclasse” o “classe derivata”.

Implementazione dell’Ereditarietà

Per creare una classe derivata da una classe base, la classe figlia deve essere definita con il nome della classe genitore tra parentesi. La classe figlia può quindi accedere agli attributi e ai metodi della classe genitore.

class Veicolo:
    def __init__(self, marca):
        self.marca = marca

    def descrizione(self):
        return f"Questo è un veicolo di marca {self.marca}"

class Automobile(Veicolo):
    pass

auto = Automobile("Toyota")
print(auto.descrizione())  # "Questo è un veicolo di marca Toyota"

Motivazioni per l’Ereditarietà

L’ereditarietà consente di evitare la duplicazione del codice, poiché le classi figlie possono ereditare le funzionalità dalla classe genitore. Ciò promuove la riutilizzabilità e semplifica la manutenzione del codice.

Costruttore e super()

Quando si utilizza l’ereditarietà, è possibile ereditare il costruttore della classe genitore utilizzando la funzione super(). Questo consente alla classe figlia di inizializzare sia i propri attributi che quelli della classe genitore.

class Automobile(Veicolo):
    def __init__(self, marca, modello):
        super().__init__(marca)
        self.modello = modello

auto = Automobile("Toyota", "Corolla")
print(auto.descrizione())  # "Questo è un veicolo di marca Toyota"

Aggiungere ProprietĂ  e Metodi

La classe figlia può aggiungere nuove proprietà e metodi oltre a quelli ereditati dalla classe genitore. Questo consente di personalizzare e ampliare le funzionalità.

class Automobile(Veicolo):
    def __init__(self, marca, modello):
        super().__init__(marca)
        self.modello = modello

    def descrizione_completa(self):
        return f"{self.marca} {self.modello}"

auto = Automobile("Toyota", "Corolla")
print(auto.descrizione_completa())  # "Toyota Corolla"

Sovrascrittura di Metodi

La classe figlia può anche sovrascrivere i metodi ereditati dalla classe genitore per personalizzare il comportamento.

class Automobile(Veicolo):
    def __init__(self, marca, modello):
        super().__init__(marca)
        self.modello = modello

    def descrizione(self):
        return f"Questa è un'auto di marca {self.marca} e modello {self.modello}"

auto = Automobile("Toyota", "Corolla")
print(auto.descrizione())  # "Questa è un'auto di marca Toyota e modello Corolla"

Conclusione

L’ereditarietà in Python consente di creare classi figlie che ereditano attributi e metodi dalla classe genitore. Questo promuove il riutilizzo del codice e la creazione di gerarchie di classi. Le classi figlie possono aggiungere nuove funzionalità, sovrascrivere metodi e personalizzare il comportamento. L’utilizzo di super() nel costruttore permette di inizializzare sia gli attributi della classe figlia che quelli della classe genitore.