Pitone

Polimorfismo in Python

Polimorfismo in Python
Polimorfismo significa "molte forme.” Il 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 parla di polimorfismo. Un'altra caratteristica di OOP è eredità, attraverso il quale è possibile creare la classe figlia ereditando le caratteristiche della classe genitore. A volte, è necessario che il programmatore dichiari un metodo con lo stesso nome in entrambe le classi genitore e figlio per vari scopi. Questo tipo di attività può essere implementato anche utilizzando il polimorfismo. Questo articolo spiega come definire il polimorfismo nella programmazione orientata agli oggetti (OOP).

Esempio 1: polimorfismo con funzioni e oggetti

Lo script seguente 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 dell'oggetto. Il Caratteristiche() il metodo è definito in entrambe le classi, ma l'output del metodo per ogni classe è leggermente diverso. Il Crea_Oggetto() la funzione viene utilizzata per creare un oggetto della classe. Questa funzione viene eseguita due volte per creare l'oggetto nel 'Pappagallo' classe e  nel 'Struzzo' classe. Ciascuno chiamerà il metodo features() di entrambe le classi e stamperà l'output.

#!/usr/bin/env python3
# Definisci la classe Parrot
classe pappagallo():
def __init__(self,colore):
se stesso.colore = colore
def caratteristiche (auto):
print("Il colore del pappagallo è %s" %self.colore)
print("Il pappagallo può volare")
# Definisci la classe Struzzo
classe Struzzo():
def __init__(self,colore):
se stesso.colore = colore
def caratteristiche (auto):
print("Il colore dello struzzo è %s" %self.colore)
print("Lo struzzo non può volare")
# Definire la funzione per chiamare il metodo della classe
def Crea_Oggetto(Oggetto):
Oggetto.Caratteristiche()
# Crea un oggetto della classe Parrot
Create_Object(Pappagallo('Verde'))
# Crea un oggetto della classe Struzzo
Create_Object(Struzzo('Bianco e nero'))

Produzione

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

Esempio 2: polimorfismo in metodi di classi non correlati

Come nell'esempio precedente, lo script seguente 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 inizializzeranno le variabili necessarie. Il polimorfismo viene implementato qui creando il post_dettagli() e stipendio() metodi all'interno di entrambe le classi. Il contenuto di questi metodi è diverso per ciascuna di queste classi. Successivamente, le variabili oggetto vengono create per entrambe le classi e iterate da a per un ciclo continuo. In ogni iterazione, il post_dettagli() e stipendio() vengono chiamati i metodi per stampare l'output.

#!/usr/bin/env python3
# Definisci una classe chiamata Manager
Responsabile di classe:
def __init__(self, nome, dipartimento):
se stesso.nome = nome
se stesso.posto = 'Gestore'
se stesso.dipartimento = dipartimento
# Definisci la funzione per impostare i dettagli
def post_details(self):
se stesso.Dipartimento.superiore() == 'HR':
se stesso.base = 30000
altro:
se stesso.base = 25000
se stesso.casaAffitto = 10000
se stesso.trasporto = 5000
print("Il post di %sè%s" %(self.nome, me stesso.inviare))
# Definisci la funzione per calcolare lo stipendio
def stipendio (auto):
stipendio = me stesso.base + auto.casaAffitto + auto.trasporto
restituire lo stipendio
# Definisci una classe chiamata Clerk
impiegato di classe:
def __init__(self, nome):
se stesso.nome = nome
se stesso.post = 'impiegato'
# Definisci la funzione per impostare i dettagli
def post_details(self):
se stesso.base = 10000
se stesso.trasporto = 2000
print("Il post di %sè%s" %(self.nome, me stesso.inviare))
# Definisci la funzione per calcolare lo stipendio
def stipendio (auto):
stipendio = me stesso.base + auto.trasporto
restituire lo stipendio
# Crea oggetti per le classi
manager = Manager("Kabir", "hr")
impiegato = Impiegato("Robin")
# Chiama le stesse funzioni dalle diverse classi
per obj in (direttore, impiegato):
obj.post_dettagli()
print("Lo stipendio è ",obj.stipendio())

Produzione

Il seguente output mostra che l'oggetto del 'Mangiatoia' viene utilizzata nella prima iterazione di per loop e lo stipendio del manager viene stampato dopo il calcolo. L'oggetto dell'Impiegato' viene utilizzata nella seconda iterazione di per loop e lo stipendio dell'impiegato viene stampato dopo il calcolo.

Esempio 3: polimorfismo in metodi di classi correlate

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

#!/usr/bin/env python3
# Definisci la classe genitore
classe Forma_Geometrica:
def __init__(self, nome):
se stesso.nome = nome
# Definisci la classe figlia per calcolare l'area del triangolo
classe Triangolo (Geometric_Shape):
def __init__(self,nome, base, altezza):
super().__init__(nome)
se stesso.base = base
se stesso.altezza = altezza
def area(self):
risultato = 0.5 * sé.base * sé.altezza
print("\nL'area di %s = %5.2f" %(auto.nome, risultato))
# Definisci la classe figlia per calcolare l'area del cerchio
classe Circle(Geometric_Shape):
def __init__(self, nome, raggio):
super().__init__(nome)
se stesso.raggio = raggio
def area(self):
risultato = 3.14 * sé.raggio**2
print("\nL'area di %s = %5.2f" %(auto.nome, risultato))
cal_area=input("Quale area vuoi calcolare? triangolo/cerchio\n")
se cal_area.upper()== 'TRIANGOLO':
base = float(input('Inserisci la base del triangolo: '))
altezza = float(input('Inserisci l'altezza del triangolo: '))
obj = Triangolo('Triangolo',base,altezza)
obj.la zona()
elif cal_area.superiore()== 'CERCHIO':
raggio = float(input('Inserisci il raggio del cerchio: '))
obj = Cerchio('Cerchio', raggio)
obj.la zona()
altro:
print("Inserimento errato")

Produzione

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

Conclusione

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

Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...
Come installare e giocare a Doom su Linux
Introduzione a Doom La serie Doom è nata negli anni '90 dopo l'uscita dell'originale Doom. È stato un successo immediato e da quel momento in poi la s...
Vulkan per utenti Linux
Con ogni nuova generazione di schede grafiche, vediamo gli sviluppatori di giochi spingere i limiti della fedeltà grafica e avvicinarsi di un passo al...