polimorfismo python

Python è un linguaggio molto versatile che prevede anche la programmazione ad oggetti.

In questo articolo vedremo il polimorfismo python

3 minuti

Nella programmazione python, il polimorfismo assume un’importanza cruciale, consentendo di scrivere clean code favorendo tempi di sviluppo, e semplificando la manutenzione.

Polimorfismo Python

Cos’è il polimorfismo: la parola polimorfismo significa avere molte forme. Nello sviluppo del software, polimorfismo significa definire diversi tipi di funzione, ma tutti con lo stesso nome. La differenza fondamentale è il tipo di dati e il numero di argomenti utilizzati nella funzione.

Esempio di funzioni polimorfiche integrate:

# Python program to demonstrate in-built poly-
# morphic functions

# len() being used for a string
print(len("geeks"))

# len() being used for a list
print(len([10, 20, 30]))

Output

5
3

Esempi di funzioni polimorfiche: 

# A simple Python function to demonstrate 
# Polymorphism

def add(x, y, z = 0): 
    return x + y+z

# Driver code 
print(add(2, 3))
print(add(2, 3, 4))

Output

5
9

Polimorfismo con metodi di classe: 

Il codice seguente mostra come nella programmazione Python è possibile usare due tipi di classi diverse, nello stesso modo. Creiamo un ciclo per scorrere una tupla di oggetti. Quindi chiamiamo i metodi senza preoccuparci di quale tipo di classe sia ogni oggetto. Supponiamo che questi metodi esistano effettivamente in ogni classe. 

class India():
    def capital(self):
        print("New Delhi is the capital of India.")

    def language(self):
        print("Hindi is the most widely spoken language of India.")

    def type(self):
        print("India is a developing country.")

class USA():
    def capital(self):
        print("Washington, D.C. is the capital of USA.")

    def language(self):
        print("English is the primary language of USA.")

    def type(self):
        print("USA is a developed country.")

obj_ind = India()
obj_usa = USA()
for country in (obj_ind, obj_usa):
    country.capital()
    country.language()
    country.type()

Output

New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.

Polimorfismo con ereditarietà: 

In programmazione Python, il polimorfismo ci consente di definire metodi nella classe figlia che hanno lo stesso nome dei metodi nella classe padre. Nell’ereditarietà, la classe figlia eredita i metodi dalla classe padre. Tuttavia, è possibile modificare un metodo in una classe figlia che ha ereditato dalla classe padre. Ciò è particolarmente utile nei casi in cui il metodo ereditato dalla classe padre non si adatta perfettamente alla classe figlia. In tali casi, reimplementiamo il metodo nella classe figlia. Questo processo di reimplementazione di un metodo nella classe figlia è noto come Method Overriding .  

class Bird:
  def intro(self):
    print("There are many types of birds.")
    
  def flight(self):
    print("Most of the birds can fly but some cannot.")
  
class sparrow(Bird):
  def flight(self):
    print("Sparrows can fly.")
    
class ostrich(Bird):
  def flight(self):
    print("Ostriches cannot fly.")
    
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()

obj_bird.intro()
obj_bird.flight()

obj_spr.intro()
obj_spr.flight()

obj_ost.intro()
obj_ost.flight()

Output

There are many types of birds.
Most of the birds can fly but some cannot.
There are many types of birds.
Sparrows can fly.
There are many types of birds.
Ostriches cannot fly.

 
Polimorfismo con una funzione e oggetti: 

È anche possibile creare una funzione che può accettare qualsiasi oggetto, consentendo il polimorfismo. In questo esempio di programmazione python, creiamo una funzione chiamata “func()” che accetterà un oggetto che chiameremo “obj”. Sebbene stiamo usando il nome “obj”, qualsiasi oggetto istanziato potrà essere chiamato in questa funzione. Quindi, diamo alla funzione qualcosa da fare che utilizza l’oggetto “obj” che le abbiamo passato. In questo caso, chiamiamo i tre metodi, vale a dire, capital(), Language() e type(), ognuno dei quali è definito nelle due classi “India” e “USA”. Quindi, creiamo le istanziazioni di entrambe le classi “India” e “USA”, se non le abbiamo già. Con queste, possiamo chiamare la loro azione utilizzando la stessa funzione func(): 

def func(obj):
    obj.capital()
    obj.language()
    obj.type()
 
obj_ind = India()
obj_usa = USA()
 
func(obj_ind)
func(obj_usa)

  
Codice: Implementazione del polimorfismo con una funzione 
 

class India():
    def capital(self):
        print("New Delhi is the capital of India.")
 
    def language(self):
        print("Hindi is the most widely spoken language of India.")
 
    def type(self):
        print("India is a developing country.")
 
class USA():
    def capital(self):
        print("Washington, D.C. is the capital of USA.")
 
    def language(self):
        print("English is the primary language of USA.")
 
    def type(self):
        print("USA is a developed country.")

def func(obj):
    obj.capital()
    obj.language()
    obj.type()
 
obj_ind = India()
obj_usa = USA()
 
func(obj_ind)
func(obj_usa)

Output

New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.

Semplice esempio di polimorfismo python: 

polimorfismo Python utilizzando l’ereditarietà e l’override del metodo:

class Animal:
    def speak(self):
        raise NotImplementedError("Subclass must implement this method")

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# Create a list of Animal objects
animals = [Dog(), Cat()]

# Call the speak method on each object
for animal in animals:
    print(animal.speak())

Output

Woof! Meow!

Autore