Cos'è il polimorfismo in Python? Polimorfismo spiegato con esempi
Pubblicato: 2021-03-05Sommario
introduzione
Python è un linguaggio di programmazione di alto livello, interpretato e open source. Ha guadagnato molta attenzione tra molti programmatori e sviluppatori perché supportava librerie che aiutano in molte attività come l'analisi esplorativa dei dati, la programmazione della GUI, ecc. Inoltre, la programmazione in Python è molto interessante.
Discuteremo una caratteristica interessante di Python in questo articolo. Quindi iniziamo!
Cos'è il polimorfismo?
La parola polimorfismo deriva dalla parola greca poly (che significa molte) e morfismo (forme). Significa che un singolo nome di funzione o nome di metodo può avere più moduli. E questo soddisfa il desiderio di evitare la duplicazione del codice nell'implementazione.
Ma il polimorfismo in Python è leggermente diverso dal polimorfismo in altri linguaggi di programmazione. Linguaggi di programmazione come java e c++ supportano il polimorfismo in fase di compilazione (sovraccarico del metodo). Nell'overloading del metodo, più metodi possono avere lo stesso nome del metodo ma differire nella firma del parametro. Questa funzione non è supportata da Python. Se più metodi hanno la stessa funzione, l'implementazione della funzione più recente sovrascriverà l'implementazione della funzione precedente.
Polimorfismo funzionale
Il polimorfismo delle funzioni in Python può essere classificato in due polimorfismi definiti dall'utente e polimorfismi predefiniti.
Possiamo implementare il polimorfismo definito dall'utente per chiamare la stessa funzione con una firma di parametro diversa, e questo può essere considerato come una piccola compensazione all'indisponibilità dell'overloading del metodo in Python. Esaminiamo un codice di esempio
def mul (a,b,c= 1 ): ritorno a*b*c; stampa(mul( 1 , 2 , 3 )) stampa(mul( 1 , 2 )) |
Nel codice precedente, anche se il numero di parametri passati non è uguale, entrambe le istruzioni print fanno riferimento allo stesso metodo. Nella seconda chiamata di funzione, al parametro c viene assegnato un valore predefinito di 1.
Allo stesso modo, pochi metodi predefiniti in Python mostrano caratteristiche di polimorfismo, in cui un singolo metodo può accettare parametri di diversi tipi di dati. Metodi come len() mostrano questa caratteristica. Ed ecco il codice per illustrarlo.
print(len([ 1 , 2 , 3 , 4 ])) print(len(( 1 , 2 , 3 , 4 ))) print(len( “python” )) print(len({ “chiave1” : “valore1” , “chiave2” : “valore2” })) |
Nel codice sopra, lo stesso metodo len() viene utilizzato per un elenco, una tupla, una stringa e un dizionario.
Checkout: applicazioni Python nel mondo reale
Sovraccarico dell'operatore
Un operatore come '+' può essere utilizzato in diversi modi. Ad esempio, può essere utilizzato per aggiungere due numeri, stringhe, elenchi, ecc. Ed ecco il codice per dimostrarlo.
l1=[ 1 , 2 , 3 ] l2=[ 3 , 4 , 5 ] n1= 2 n2= 3 s1= “Ehi” s2= “là” stampa(l+l1) stampa(s1+s2) stampa(n1+n2) |
Sovrascrittura del metodo
Anche l'override del metodo è considerato polimorfismo di runtime ed è supportato da molti linguaggi come java, c++ e python.
Questa funzionalità è correlata all'ereditarietà, una classe figlio in python eredita le funzioni membro e le variabili membro dalla sua classe padre. E se riteniamo che l'implementazione del metodo della classe genitore non sia rilevante, allora possiamo sovrascrivere quel metodo nella classe figlia. E la modifica delle funzioni membro secondo il requisito nella classe figlio viene definita sovrascrittura del metodo.
classe due_ruote : def carburante (auto): print( "La due ruote ha bisogno di carburante per funzionare" ) def capacità (auto): print( “Le biciclette sono adatte per un massimo di 2 persone” ) classe bici_elettrica (due_ruote): def carburante (auto): print( “Le bici elettriche funzionano a batteria” ) classe benzina_bici (due_ruote): def carburante (auto): print( “la moto a benzina funziona a benzina” ) bici=due_ruote() bici elettrica=bici_elettrica() pbike=moto_benzina() bike.fuel() bike.capacità() ebike.fuel() ebike.capacità() pbike.fuel() pbike.capacity() |
Nel codice sopra, two_wheeler è la classe genitore e electric_bike, benzina_bike sono le classi figlie. E i metodi fuel(), capacity() sono ereditati dalle classi figli electric_bike e petrol_bike. Ora possiamo aggiornare l'implementazione dei metodi, se richiesto, e all'interno della classe electric_bike abbiamo reimplementato il metodo fuel(), analogamente reimplementato il metodo fuel() nella classe benzina_bike.
Ad esempio nel codice ebike.fuel() stampa "le bici elettriche funzionano a batteria" e pbike.fuel() stampa le bici a benzina funzionano a benzina".
Polimorfismo nei metodi di classe
Python consente a classi diverse di avere lo stesso nome di metodo e questo rientra nella funzione di polimorfismo. E l'invocazione del metodo si basa sull'oggetto che usiamo per chiamare il metodo.
bicicletta di classe : def carburante (auto): print( “la bicicletta non ha bisogno di carburante!” ) def capacità (auto): print( “Le biciclette sono adatte per un viaggio con una sola persona” ) classe electric_bike : def carburante (auto): print( “Le bici elettriche funzionano a batteria” ) def capacità (auto): print( “Le bici elettriche possono ospitare un massimo di 2 persone” ) classe benzina_bike : def carburante (auto): print( “la moto a benzina funziona a benzina” ) def capacità (auto): print( “Le bici a benzina sono adatte per massimo 2 persone” ) ecobike=bicicletta() bici elettrica=bici_elettrica() pbike=moto_benzina() l=[ecobike,ebike,pbike] per obj in l: obj.fuel() obj.capacità() |
Nel codice sopra, abbiamo creato tre oggetti delle tre classi bicycle, electric_bike e petrol_bike. E tutte e tre le classi hanno gli stessi nomi di metodo. Ora è compito del compilatore decidere quale metodo deve essere invocato in base al tipo di oggetto utilizzato per invocare il metodo.
Ad esempio, ecobike.fuel() invocherà il metodo fuel() della classe bicycle e ebike.fuel() invocherà il metodo fuel() della classe electric_bike. Aggiungiamo tutti questi oggetti a un elenco e in ogni iterazione chiameremo gli stessi nomi di funzione ma il tipo di oggetto che invoca il metodo cambierà. Nella prima iterazione vengono chiamati i metodi della classe bicycle, e i metodi di electric_bike, petrol_bike nelle successive iterazioni.
Leggi: Idee e argomenti del progetto Python
Conclusione
In questo articolo, abbiamo capito cosa significa polimorfismo, abbiamo discusso di come Python sia diverso nel caso di sovraccarico del metodo. Abbiamo esaminato le dimostrazioni di varie possibilità di polimorfismo in Python, come il sovraccarico di operatori, il polimorfismo di funzioni, l'override di metodi e il polimorfismo nei metodi di classe.
Ora che sei a conoscenza del polimorfismo in Python, implementa il tuo prossimo codice Python usando tutte queste funzionalità!
Se sei curioso di conoscere la scienza dei dati, dai un'occhiata al Diploma PG in Data Science di IIIT-B e upGrad, creato per i professionisti che lavorano e offre oltre 10 casi di studio e progetti, workshop pratici pratici, tutoraggio con esperti del settore, 1- on-1 con mentori del settore, oltre 400 ore di apprendimento e assistenza al lavoro con le migliori aziende.