En este tutorial, aprenderemos sobre polimorfismo, diferentes tipos de polimorfismo y cómo podemos implementarlos en Python con la ayuda de ejemplos.
¿Qué es el polimorfismo?
El significado literal del polimorfismo es la condición de ocurrencia en diferentes formas.
El polimorfismo es un concepto muy importante en programación. Se refiere al uso de una entidad de un solo tipo (método, operador u objeto) para representar diferentes tipos en diferentes escenarios.
Tomemos un ejemplo:
Ejemplo 1: polimorfismo en el operador de suma
Sabemos que el +
operador se usa mucho en programas Python. Pero no tiene un solo uso.
Para tipos de datos enteros, el +
operador se utiliza para realizar operaciones de suma aritmética.
num1 = 1 num2 = 2 print(num1+num2)
Por lo tanto, el programa anterior produce 3.
De manera similar, para los tipos de datos de cadena, el +
operador se usa para realizar la concatenación.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
Como resultado, el programa anterior genera Programación Python.
Aquí, podemos ver que +
se ha utilizado un solo operador para realizar diferentes operaciones para distintos tipos de datos. Esta es una de las ocurrencias más simples de polimorfismo en Python.
Polimorfismo de funciones en Python
Hay algunas funciones en Python que son compatibles para ejecutarse con múltiples tipos de datos.
Una de esas funciones es la len()
función. Puede ejecutarse con muchos tipos de datos en Python. Veamos algunos casos de uso de ejemplo de la función.
Ejemplo 2: función len () polimórfica
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Salida
9 3 2
Aquí, podemos ver que muchos tipos de datos como cadena, lista, tupla, conjunto y diccionario pueden funcionar con la len()
función. Sin embargo, podemos ver que devuelve información específica sobre tipos de datos específicos.

Polimorfismo de clases en Python
El polimorfismo es un concepto muy importante en la programación orientada a objetos.
Para obtener más información sobre la programación orientada a objetos en Python, visite: Programación orientada a objetos de Python
Podemos usar el concepto de polimorfismo mientras creamos métodos de clase, ya que Python permite que diferentes clases tengan métodos con el mismo nombre.
Luego, luego podemos generalizar la llamada a estos métodos sin tener en cuenta el objeto con el que estamos trabajando. Veamos un ejemplo:
Ejemplo 3: polimorfismo en métodos de clase
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()
Salida
Miau soy un gato. Mi nombre es Kitty. Tengo 2,5 años. Meow Bark Soy un perro. Mi nombre es Fluffy. Tengo 4 años. Ladrar
Aquí, hemos creado dos clases Cat
y Dog
. Comparten una estructura similar y tienen los mismos nombres de método info()
y make_sound()
.
Sin embargo, tenga en cuenta que no hemos creado una superclase común ni hemos vinculado las clases de ninguna manera. Incluso entonces, podemos empaquetar estos dos objetos diferentes en una tupla e iterar a través de ella usando una variable animal común. Es posible debido al polimorfismo.
Polimorfismo y herencia
Como en otros lenguajes de programación, las clases secundarias en Python también heredan métodos y atributos de la clase principal. Podemos redefinir ciertos métodos y atributos específicamente para que se ajusten a la clase secundaria, lo que se conoce como Anulación de método .
El polimorfismo nos permite acceder a estos métodos y atributos anulados que tienen el mismo nombre que la clase principal.
Veamos un ejemplo:
Ejemplo 4: Anulación de método
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())
Salida
Círculo Soy una forma bidimensional. Los cuadrados tienen cada ángulo igual a 90 grados. 153,93804002589985
Aquí, podemos ver que los métodos como __str__()
, que no se han anulado en las clases secundarias, se utilizan desde la clase principal.
Debido al polimorfismo, el intérprete de Python reconoce automáticamente que el fact()
método para el objeto a
(clase Square) está anulado. Entonces, usa el definido en la clase secundaria.
Por otro lado, dado que el fact()
método para el objeto b no se reemplaza, se usa desde la clase Parent Shape.

Nota : La sobrecarga de métodos , una forma de crear varios métodos con el mismo nombre pero con diferentes argumentos, no es posible en Python.