English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base Python

Controllo dei flussi Python

Funzione in Python

Tipi di dati in Python

Operazioni di file Python

Oggetti e classi Python

Data e ora Python

Conoscenze avanzate di Python

Manuale di Python

Polimorfismo en Python

In questo tutorial, impareremo il polimorfismo, il polimorfismo di diversi tipi e come dimostrare i loro implementazioni in Python con esempi.

Cos'è il polimorfismo?

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:

Esempio 1: Polimorfismo dell'operatore di somma

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.

Polimorfismo delle funzioni 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.

Esempio 2: Polimorfismo della funzione len()

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.

Polimorfismo nella funzione len() in Python

Polimorfismo delle classi in Python

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:

Esempio 3: Polimorfismo nei metodi delle classi

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.

Polimorfismo e ereditarietà

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:

Esempio 4: Riscrittura del metodo

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.

Polimorfismo tra classe padre e classe figlia in Python

Attenzione:Sovraccarico del metodoÈ un metodo che non può creare un metodo con lo stesso nome ma con parametri diversi in Python.