Introduzione all'ereditarietà in Python

Python, che vanta capacità multi-paradigma, ospita ovviamente lo stile di programmazione orientato agli oggetti. E qualsiasi linguaggio non può essere abbastanza ridicolo da rivendicare una metodologia orientata agli oggetti senza fornire supporto per l'ereditarietà, incluso Python. Python offre un sapore decisamente unico di ereditarietà, consentendo operazioni estremamente potenti mai viste prima. Sebbene presenti alcune limitazioni, ad esempio, attualmente la sicurezza attraverso l'ambito per i membri della classe è raggiunta solo per convenzione e non è intrinsecamente parte del linguaggio. Pertanto, i membri dichiarati come privati ​​sono effettivamente accessibili pubblicamente con alcune modifiche.

Sintassi della classe

La sintassi per definire una classe derivata quando una o più classi base devono essere ereditate è la seguente:

class derivedClassName(baseClassName(, …)):


Come mostrato, la classe derivata specifica un elenco separato da virgole di classi base da ereditare nell'intestazione della definizione della classe.

Cucina di classe

Iniziamo definendo una classe base utilizzata per tutti i nostri esempi:

class cuisine():
def __init__(self, type):
self.type = type
returncooked_cuisine = new cuisine('cooked')

La base mostrata definisce un modello di oggetto utilizzato per definire le cucine e catturare se si tratta di una cucina cucinata o meno. Ha anche un costruttore utilizzato per accettare il tipo di cucina. Successivamente viene creato un oggetto di tipo "cotto".

Tipi di ereditarietà in Python

Esistono principalmente due tipi di ereditarietà, una combinazione dei quali produce ogni altro tipo.

1. Eredità singola: una classe base, ereditata da una classe derivata. Questo è il tipo più semplice di eredità. Anche il minimo possibile. La classe derivata richiama automaticamente il costruttore della classe base.

2. Ereditarietà multipla: classi di base multiple ereditate da una classe derivata. I costruttori di classi base vengono invocati nell'ordine in cui le classi sono state derivate.

Tipi derivati ​​di ereditarietà

La combinazione delle due precedenti forme di eredità può portare ai seguenti tipi di eredità:

1. Eredità gerarchica: una classe base ereditata da più classi derivate. Ogni classe derivata funzionerà in modo indipendente ma gli oggetti condividono le variabili di classe tra classi diverse.

2. Ereditarietà multi-livello: una classe derivata che funge da classe base per un'altra classe derivata. I costruttori della classe base vengono invocati in modo ricorsivo in questo caso.

3. Ereditarietà ibrida: una combinazione di più istanze dei tipi di ereditarietà sopra menzionati. Ciò potrebbe portare a qualsiasi combinazione immaginabile di classi.

Esempi di ereditarietà in Python

Di seguito sono riportati alcuni esempi di ereditarietà in Python:

1. Eredità singola

Creiamo una classe chiamata Indian Cuisine che eredita la cucina di classe.

class indian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnindian_cuisine = new cuisine('cooked', 'India')

Come mostrato in una nuova classe, è stato creato indian_cusine che accetta il parametro type e invoca un costruttore della classe base, passando il parametro. Crea inoltre un nuovo posto variabile oggetto . Questo è usato solo nella classe derivata e non visibile agli oggetti della classe base.

2. Eredità gerarchica

Creiamo una classe chiamata ItalianCuisine che eredita la cucina di classe:

class italian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnitalian_cuisine = new cuisine('cooked', 'Italy')

Come mostrato in una nuova classe, è stato creato italian_cusine che accetta il parametro type e invoca un costruttore della classe base, passando il parametro. Crea inoltre un nuovo posto variabile oggetto . Questo è usato solo nella classe derivata e non visibile agli oggetti della classe base. Ora, poiché due classi, indian_cusines e italian_cuisine ereditano il corso di cucina, c'è un'eredità gerarchica implementata.

3. Ereditarietà multipla

Creiamo una classe chiamata FineDineCuisine che eredita da più classi.

class fine_dine_cuisine(indian_cuisine, italian_cuisine):
def __init__(self, type, place, portion_size):
super().__init__(type, place)
self.portion_size = portion_size
returnfine_dine_cuisine = new cuisine('cooked', 'India', 4)

La nuova classe fine_dine_cuisine, eredita sia da indian_cuisine che da italian_cuisine, ereditando i loro parametri. Accetta il tipo di parametri, il posto e la porzione_size. tipo e luogo vengono passati come argomenti per i costruttori della classe base. porzione_size è un nuovo parametro oggetto non condiviso con le classi base.

Nota sull'ereditarietà del diamante:

Ora, poiché sia ​​indian_cuisine che italian_cuisine ereditano dalla classe di cucina, costituisce un classico caso di eredità di diamante, in cui più istanze di una classe di base sono direttamente / indirettamente presenti per una classe derivata. Nella maggior parte dei linguaggi, come c ++, ciò causa un problema o vengono utilizzate classi astratte. Python, d'altra parte, specifica la propria soluzione innovativa. Eredita i metodi e gli attributi comuni solo una volta dando la preferenza alle classi nell'ordine di eredità. Pertanto, qui, poiché la cucina viene ereditata due volte, viene data preferenza alla versione indian_cuisine della cucina, poiché viene ereditata per prima.

Nota sui membri della classe:

Qualsiasi attributo definito nella definizione della classe, ma non all'interno di una funzione, diventa un attributo di classe ed è condiviso da tutte le istanze della classe. Pertanto, se un oggetto modifica uno di questi attributi di classe, le modifiche sono visibili a tutte le altre istanze (sia per lo stesso oggetto di classe che per l'oggetto di classe derivato). Quindi fai attenzione quando usi gli attributi di classe non presenti in nessuna definizione di metodo.

Conclusione - Eredità in Python

Python ha ancora una volta definito un modo molto flessibile, accomodante e potente da usare quando il paradigma orientato agli oggetti è la via preferita. È sicuramente un concetto che tutti possono usare e dovrebbero avere sotto la cintura. Questi concetti vengono utilizzati per formare i mattoni di qualsiasi software scalabile e gestibile.
Con questa introduzione di base all'ereditarietà in Python, puoi andare avanti e indirizzare le dichiarazioni dei problemi del mondo reale e vedere quanto bene di un design sei in grado di pensare.

Articoli consigliati

Questa è una guida all'ereditarietà in Python. Qui discutiamo l'introduzione, la sintassi e i tipi di ereditarietà in Python insieme a diversi esempi e alla sua implementazione del codice. Puoi anche consultare i nostri altri articoli suggeriti:

    1. Eredità in Java
    2. Che cos'è l'ereditarietà nella programmazione?
    3. Eredità in C #
    4. Sostituzione in Java
    5. Eredità in PHP
    6. Dichiarazione della classe astratta in C # con l'esempio

Categoria: