Polimorfismo en Python (con ejemplos)

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 en la función len () en Python

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 Caty 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.

Polimorfismo en clases padre e hijo en Python

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.

Articulos interesantes...