Polimorfismo in Python (con esempi)

In questo tutorial impareremo il polimorfismo, i diversi tipi di polimorfismo e come possiamo implementarli in Python con l'aiuto di esempi.

Cos'è il polimorfismo?

Il significato letterale del polimorfismo è la condizione del verificarsi in diverse forme.

Il polimorfismo è un concetto molto importante nella programmazione. Si riferisce all'uso di una singola entità di tipo (metodo, operatore o oggetto) per rappresentare diversi tipi in diversi scenari.

Facciamo un esempio:

Esempio 1: polimorfismo in aggiunta all'operatore

Sappiamo che l' +operatore è ampiamente utilizzato nei programmi Python. Ma non ha un singolo utilizzo.

Per i tipi di dati interi, l' +operatore viene utilizzato per eseguire l'operazione di addizione aritmetica.

 num1 = 1 num2 = 2 print(num1+num2) 

Quindi, il programma di cui sopra produce 3.

Allo stesso modo, per i tipi di dati stringa, l' +operatore viene utilizzato per eseguire la concatenazione.

 str1 = "Python" str2 = "Programming" print(str1+" "+str2) 

Di conseguenza, il programma precedente genera la programmazione Python.

Qui possiamo vedere che un singolo operatore +è stato utilizzato per eseguire diverse operazioni per diversi tipi di dati. Questa è una delle occorrenze più semplici di polimorfismo in Python.

Polimorfismo delle funzioni in Python

Ci sono alcune funzioni in Python che sono compatibili per essere eseguite con più tipi di dati.

Una di queste funzioni è la len()funzione. Può funzionare con molti tipi di dati in Python. Diamo un'occhiata ad alcuni casi d'uso di esempio della funzione.

Esempio 2: funzione polimorfica len ()

 print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal"))) 

Produzione

 9 3 2 

Qui, possiamo vedere che molti tipi di dati come string, list, tuple, set e dictionary possono funzionare con la len()funzione. Tuttavia, possiamo vedere che restituisce informazioni specifiche su tipi di dati specifici.

Polimorfismo nella funzione len () in Python

Polimorfismo di classe in Python

Il polimorfismo è un concetto molto importante nella programmazione orientata agli oggetti.

Per ulteriori informazioni su OOP in Python, visitare: Python Object-Oriented Programming

Possiamo usare il concetto di polimorfismo durante la creazione di metodi di classe poiché Python consente a classi diverse di avere metodi con lo stesso nome.

Successivamente possiamo generalizzare la chiamata a questi metodi ignorando l'oggetto con cui stiamo lavorando. Diamo un'occhiata a un esempio:

Esempio 3: polimorfismo nei metodi di classe

 class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound() 

Produzione

Miao sono un gatto. Il mio nome è Kitty. Ho 2,5 anni. Meow Bark Sono un cane. Il mio nome è Fluffy. Ho 4 anni. Abbaiare

Qui abbiamo creato due classi Cate Dog. Condividono una struttura simile e hanno gli stessi nomi di metodo info()e make_sound().

Tuttavia, nota che non abbiamo creato una superclasse comune o collegato le classi in alcun modo. Anche allora, possiamo impacchettare questi due diversi oggetti in una tupla e iterare attraverso di essa usando una variabile animale comune. È possibile a causa del polimorfismo.

Polimorfismo ed ereditarietà

Come in altri linguaggi di programmazione, anche le classi figlie in Python ereditano metodi e attributi dalla classe genitore. Possiamo ridefinire alcuni metodi e attributi specificatamente per adattarli alla classe figlia, nota come Method Overriding .

Il polimorfismo ci consente di accedere a questi metodi e attributi sovrascritti che hanno lo stesso nome della classe genitore.

Diamo un'occhiata a un esempio:

Esempio 4: sostituzione del metodo

 from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area()) 

Produzione

Cerchio Sono una forma bidimensionale. I quadrati hanno ogni angolo uguale a 90 gradi. 153.93804002589985

Qui, possiamo vedere che i metodi come __str__(), che non sono stati sovrascritti nelle classi figlie, vengono usati dalla classe genitore.

A causa del polimorfismo, l'interprete Python riconosce automaticamente che il fact()metodo per object a(classe Square) è sovrascritto. Quindi, usa quello definito nella classe figlia.

D'altra parte, poiché il fact()metodo per l'oggetto b non è sovrascritto, viene utilizzato dalla classe Parent Shape.

Polimorfismo nelle classi padre e figlio in Python

Nota : il sovraccarico del metodo , un modo per creare più metodi con lo stesso nome ma argomenti diversi, non è possibile in Python.

Articoli interessanti...