English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, impareremo il polimorfismo, il polimorfismo di diversi tipi e come dimostrare i loro implementazioni in Python con esempi.
Il significato letterale del polimorfismo è la condizione che si presenta in diverse forme.
Il polimorfismo è un concetto molto importante nel programming. Si riferisce all'uso di un singolo tipo di entità (metodo, operatore o oggetto) per rappresentare diversi scenari in diverse situazioni.
Facciamo un esempio:
Sappiamo che l'operatore + è stato utilizzato ampiamente nei programmi Python. Tuttavia, non ha un uso unico.
Per il tipo di dati intero, si utilizza l'operatore + per eseguire l'operazione aritmetica di somma.
num1 = 1 num2 = 2 print(num1+num2)
Di conseguenza, il programma sopra produce l'output 3
Analogamente, per il tipo di dati stringa, si utilizza l'operatore + per connettere.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Di conseguenza, il programma sopra produce l'output : Programmazione Python
Ecco che possiamo vedere che l'operatore + esegue operazioni diverse su diversi tipi di dati. Questo è uno dei fenomeni di polimorfismo più semplici in Python.
In Python ci sono alcune funzioni che sono compatibili con molti tipi di dati.
Una di queste funzioni è la funzione len(). Può funzionare con molti tipi di dati in Python. Vediamo alcuni esempi di uso di questa funzione.
print(len("w3codebox")) print(len(["Python", "Java", "C"])) print(len({"Name": "John", "Address": "Nepal"}))
Risultato di output
5 3 2
Ecco che possiamo vedere che molti tipi di dati (ad esempio, stringa, elenco, tuple, insieme e dizionario) possono utilizzare la funzione len(). Tuttavia, possiamo vedere che restituisce informazioni specifiche sul tipo di dati specifico.
Nel programming orientato agli oggetti, il polimorfismo è un concetto molto importante.
Per ulteriori informazioni sulla programmazione orientata agli oggetti in Python, visitare:Programmazione orientata agli oggetti in Python
Quando si creano metodi di classe, possiamo utilizzare il concetto di polimorfismo, perché Python permette a classi diverse di avere metodi con lo stesso nome.
Poi possiamo generalizzare la chiamata a questi metodi più tardi ignorando l'oggetto in uso. Lasciate che vi mostri un esempio:
class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"Sono un gatto. Il mio nome è {self.name}. Ho {self.age} anni.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"Sono un cane. Il mio nome è {self.name}. Ho {self.age} anni.") 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()
Risultato di output
Meow Sono un gatto. Il mio nome è Kitty. Ho 2.5 anni. Meow Bark Sono un cane. Il mio nome è Fluffy. Ho 4 anni. Bark
Qui abbiamo creato due classi Cat e Dog. Hanno una struttura simile e hanno lo stesso nome dei metodi info() e make_sound().
Ma attenzione, non abbiamo ancora creato una superclasse pubblica o collegato queste classi in alcun modo. Anche così, possiamo impacchettare questi due oggetti diversi in una tupla e iterare su di essi utilizzando una variabile comune animal. Grazie alla polimorfismo, è permesso.
Come in altri linguaggi di programmazione, anche in Python le sottoclassi ereditano metodi e attributi dalla classe padre. Possiamo ridefinire alcuni metodi e attributi specificamente per la sottoclasse, il che si chiamaMethod Overriding(Riscrittura del metodo).
La polimorfismo ci permette di accedere a questi metodi e attributi sovrascritti con lo stesso nome della classe padre.
Lasciate che vi mostri un esempio:
from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "Sono una forma bidimensionale." 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 "Ogni angolo del quadrato è di 90 gradi." 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())
Risultato di output
Circle Sono una forma bidimensionale. Ogni angolo del quadrato è di 90 gradi. 153.93804002589985
Qui possiamo vedere che sono stati utilizzati metodi come __str__ non sovrascritti nella sottoclasse del padre.
Grazie al polimorfismo, l'interprete Python riconosce automaticamente che il metodo fact() dell'oggetto a (Square class) è stato sovrascritto. Utilizza quello definito nella sottoclasse.
D'altra parte, poiché il metodo fact() dell'oggetto b non è stato sovrascritto, può essere utilizzato dalla classe Parent Shape.
Attenzione:Sovraccarico del metodoÈ un metodo che non può creare un metodo con lo stesso nome ma con parametri diversi in Python.