Polimorfismo in Python

Polimorfismo in Python
Polimorfismo significa "molte forme."Polimorfismo Una caratteristica importante della programmazione orientata agli oggetti (OOP). Quando lo stesso metodo viene dichiarato più volte, per più scopi e in classi diverse, allora si chiama polimorfismo. Un'altra caratteristica di OOP è eredità, attraverso il quale la classe figlio può essere creata ereditando le caratteristiche della classe genitore. A volte, richiede al programmatore di dichiarare un metodo con lo stesso nome nelle classi genitore e figlio per vari scopi. Questo tipo di attività può anche essere implementato usando il polimorfismo. Questo articolo spiega come il polimorfismo può essere definito nella programmazione orientata agli oggetti (OOP).

Esempio 1: polimorfismo con funzioni e oggetti

Il seguente script mostra l'uso del polimorfismo tra due diverse classi. Una funzione viene utilizzata per creare l'oggetto di quelle classi. Il valore della variabile denominata colore è inizializzato in __dentro__() metodo di entrambi i 'Pappagallo' e il 'Struzzo'Classi al momento della creazione di oggetti. IL caratteristiche() Il metodo è definito in entrambe le classi, ma l'output del metodo per ogni classe è un po 'diverso. IL Create_object () La funzione viene utilizzata per creare un oggetto della classe. Questa funzione viene eseguita due volte per creare l'oggetto nel 'Pappagallo'classe e nella'Struzzo' classe. Ognuno chiamerà il metodo di funzionalità () di entrambe le classi e stamperà l'output.

#!/usr/bin/env python3
# Definisci la classe di pappagalli
Classe Parrot ():
def __init __ (self, colore):
se stesso.colore = colore
caratteristiche def (self):
Stampa ("Il colore del pappagallo è %s" %self.colore)
Stampa ("Il pappagallo può volare")
# Definisci la classe di struzzo
Class Ostrich ():
def __init __ (self, colore):
se stesso.colore = colore
caratteristiche def (self):
Stampa ("Il colore dello struzzo è %s" %self.colore)
stampa ("lo struzzo non può volare")
# Definisci la funzione per chiamare il metodo della classe
def create_object (oggetto):
Oggetto.caratteristiche()
# Crea oggetto della classe di pappagalli
Create_Object (Parrot ('Green'))
# Crea oggetto della classe di struzzo
Create_Object (Ostrich ('in bianco e nero'))

Produzione

Il seguente output mostra che l'oggetto del 'Pappagallo'La classe è creata con'Verde' come il colore valore. La funzione stampa l'output chiamando il caratteristiche() metodo del 'Pappagallo' classe. Successivamente, l'oggetto del 'Struzzo'La classe è creata con'Bianco e nero' come il colore valore. La funzione stampa l'output chiamando il caratteristiche() metodo del 'Struzzo' classe.

Esempio 2: polimorfismo nei metodi di classe non correlati

Come nell'esempio precedente, il seguente script mostra l'uso del polimorfismo in due classi diverse, ma non viene utilizzata alcuna funzione personalizzata per dichiarare l'oggetto. IL __dentro__() metodo di entrambi i 'Manager' E 'Impiegato'Le classi inizializzerà le variabili necessarie. Il polimorfismo è implementato qui creando il post_details () E stipendio() Metodi all'interno di entrambe le classi. Il contenuto di questi metodi è diverso per ciascuna di queste classi. Successivamente, le variabili dell'oggetto vengono create per entrambe le classi e iterate da a per un ciclo continuo. In ogni iterazione, il post_details () E stipendio() I metodi sono chiamati per stampare l'output.

#!/usr/bin/env python3
# Definisci una classe denominata manager
Manager di classe:
def __init __ (sé, nome, dipartimento):
se stesso.nome = nome
se stesso.post = 'manager'
se stesso.Dipartimento = Dipartimento
# Definisci funzione per impostare i dettagli
def post_details (self):
se sé.Dipartimento.Upper () == 'HR':
se stesso.BASIC = 30000
altro:
se stesso.base = 25000
se stesso.Houserent = 10000
se stesso.Trasporto = 5000
Stampa ("Il post di %s è %s" %(self.Nome, Self.inviare))
# Definisci la funzione per calcolare lo stipendio
Stipendio Def (self):
Stipendio = self.Basic + Self.Houserent + Self.trasporto
Stipendio di ritorno
# Definisci una classe chiamata Clerk
Impiegato di classe:
def __init __ (self, name):
se stesso.nome = nome
se stesso.Post = 'Impiegato'
# Definisci funzione per impostare i dettagli
def post_details (self):
se stesso.base = 10000
se stesso.Trasporto = 2000
Stampa ("Il post di %s è %s" %(self.Nome, Self.inviare))
# Definisci la funzione per calcolare lo stipendio
Stipendio Def (self):
Stipendio = self.Basic + Self.trasporto
Stipendio di ritorno
# Crea oggetti per le classi
Manager = Manager ("Kabir", "HR")
Impiegato = impiegato ("Robin")
# Chiama le stesse funzioni dalle diverse classi
Per OBJ in (Manager, impiegato):
obj.post_details ()
stampa ("lo stipendio è", obj.stipendio())

Produzione

Il seguente output mostra che l'oggetto del 'Mangiatoia'La classe viene utilizzata nella prima iterazione del per Loop e lo stipendio del gestore vengono stampati dopo il calcolo. L'oggetto del 'Impiegato'La classe viene utilizzata nella seconda iterazione del per Loop e lo stipendio dell'impiegato viene stampato dopo il calcolo.

Esempio 3: polimorfismo nei metodi di classe correlati

La seguente sceneggiatura mostra l'uso del polimorfismo tra due classi di bambini. Qui, entrambi 'Triangolo' E 'Cerchio"Sono le classi figlio della classe genitore denominata"Geometric_shape.'Secondo l'eredità, la classe figlio può accedere a tutte le variabili e metodi della classe genitore. IL __dentro__() metodo del 'Geometric_shape'La classe viene utilizzata in entrambe le classi figlio per inizializzare la variabile nome usando il super() metodo. I valori del base E altezza di "Triangolo'La classe verrà inizializzata al momento della creazione di oggetti. Allo stesso modo, i valori del raggio del 'Cerchio'La classe verrà inizializzata al momento della creazione di oggetti. La formula per il calcolo dell'area di un triangolo è ½ × base × altezza, che è implementato nel la zona() metodo del 'Triangolo' classe. La formula per il calcolo dell'area di un cerchio è 3.14 × (raggio)2, che è implementato nel la zona() metodo del 'Cerchio' classe. I nomi di entrambi i metodi sono gli stessi, qui, ma lo scopo è diverso. Successivamente, verrà prelevato un valore di stringa dall'utente per creare un oggetto e chiamare il metodo in base al valore. Se l'utente digita "triangolo", allora un oggetto di "Triangolo' la classe verrà creata e se il tipo di utente tipi "cerchio", allora un oggetto del 'Cerchio' la classe verrà creata. Se l'utente digita un testo senza "triangolo" o "cerchio", allora nessun oggetto verrà creato e verrà stampato un messaggio di errore.

#!/usr/bin/env python3
# Definisci la classe genitore
classe geometric_shape:
def __init __ (self, name):
se stesso.nome = nome
# Definisci la classe figlio per il calcolo dell'area del triangolo
Triangolo di classe (geometric_shape):
def __init __ (self, nome, base, altezza):
super().__init __ (nome)
se stesso.base = base
se stesso.altezza = altezza
area def (self):
risultato = 0.5 * Self.base * Self.altezza
Stampa ("\ n L'area di %s = %5.2f " %(self.nome, risultato))
# Definisci la classe figlio per calcolare l'area del cerchio
Class Circle (Geometric_Shape):
def __init __ (sé, nome, raggio):
super().__init __ (nome)
se stesso.raggio = raggio
area def (self):
risultato = 3.14 * Self.raggio ** 2
Stampa ("\ n L'area di %s = %5.2f " %(self.nome, risultato))
cal_area = input ("quale area si desidera calcolare? triangolo/cerchio \ n ")
Se cal_area.Upper () == 'Triangle':
base = float (input ('immettere la base del triangolo:'))
altezza = float (input ('immettere l'altezza del triangolo:'))
obj = triangolo ('triangolo', base, altezza)
obj.la zona()
elif cal_area.Upper () == 'Circle':
raggio = float (input ('immettere il raggio del cerchio:'))
obj = cerchio ('cerchio', raggio)
obj.la zona()
altro:
Stampa ("Input errata")

Produzione

Nel seguente output, lo script viene eseguito due volte. La prima volta, triangolo viene preso come input e l'oggetto viene inizializzato con tre valori "Triangolo', base, E altezza. Questi valori vengono quindi utilizzati per calcolare l'area del triangolo e l'uscita verrà stampata. La seconda volta, cerchio è preso come input e l'oggetto viene inizializzato con due valori "Cerchio' E raggio. Questi valori vengono quindi utilizzati per calcolare l'area del cerchio e l'uscita verrà stampata.

Conclusione

Questo articolo ha utilizzato semplici esempi per spiegare tre diversi usi del polimorfismo in Python. Il concetto di polimorfismo può anche essere applicato senza classi, un metodo che non è spiegato qui. Questo articolo ha aiutato i lettori a saperne di più su come applicare il polimorfismo nella programmazione di Python a base di oggetti.