¿Qué es el polimorfismo en Python? Polimorfismo explicado con ejemplos

Publicado: 2021-03-05

Tabla de contenido

Introducción

Python es un lenguaje de programación de alto nivel, interpretado y de código abierto. Ha ganado mucha atención entre muchos programadores y desarrolladores porque admite bibliotecas que ayudan en muchas tareas, como el análisis exploratorio de datos, la programación de GUI, etc. Además, la programación en python es muy interesante.

Vamos a discutir una característica interesante de python en este artículo. ¡Entonces empecemos!

¿Qué es el polimorfismo?

La palabra polimorfismo se deriva de la palabra griega poli (que significa muchos) y morfismo (formas). Significa que un solo nombre de función o nombre de método puede tener múltiples formas. Y esto cumple el deseo de evitar la duplicación de código en la implementación.

Pero el polimorfismo en python es un poco diferente del polimorfismo en otros lenguajes de programación. Los lenguajes de programación como java y c++ admiten polimorfismo en tiempo de compilación (sobrecarga de métodos). En la sobrecarga de métodos, varios métodos pueden tener el mismo nombre de método pero diferir en la firma de sus parámetros. Esta función no es compatible con python. Si varios métodos tienen la misma función, la implementación de la función más reciente anulará la implementación de la función anterior.

Polimorfismo de función

El polimorfismo de funciones en Python se puede clasificar en dos polimorfismos definidos por el usuario y polimorfismos predefinidos.

Podemos implementar el polimorfismo definido por el usuario para llamar a la misma función con una firma de parámetro diferente, y esto puede considerarse una pequeña compensación por la falta de disponibilidad de la sobrecarga de métodos en Python. Veamos un código de ejemplo.

def mul (a,b,c= 1 ):
devuelve a*b*c;

imprimir (mul ( 1 , 2 , 3 ))
imprimir (mul ( 1 , 2 ))

En el código anterior, aunque el número de parámetros pasados ​​no es igual, ambas declaraciones de impresión se refieren al mismo método. En la segunda llamada de función, el parámetro c se asigna con un valor predeterminado de 1.

De manera similar, pocos métodos predefinidos en python exhiben características de polimorfismo, donde un solo método puede aceptar parámetros de diferentes tipos de datos. Métodos como len() exhiben esta característica. Y aquí está el código para ilustrar eso.

imprimir(largo([ 1 , 2 , 3 , 4 ]))
imprimir(largo(( 1 , 2 , 3 , 4 )))
imprimir (len ( "pitón" ))
print(len({ “clave1” : “valor1” , “clave2” : “valor2” }))

En el código anterior, se usa el mismo método len() para una lista, una tupla, una cadena y un diccionario.

Pago: aplicaciones de Python en el mundo real

Sobrecarga del operador

Un operador como '+' se puede usar de varias maneras. Por ejemplo, se puede usar para agregar dos números, cadenas, así como listas, etc. Y aquí está el código para demostrarlo.

l1=[ 1 , 2 , 3 ]
l2=[ 3 , 4 , 5 ]

n1= 2
n2= 3

s1= “hola”
s2= “allí”

imprimir(l+l1)
imprimir(s1+s2)
imprimir (n1 + n2)

Anulación de métodos

La anulación de métodos también se considera polimorfismo en tiempo de ejecución y es compatible con muchos lenguajes como java, c++ y python.

Esta función está relacionada con la herencia, una clase secundaria en python hereda funciones miembro y variables miembro de su clase principal. Y si creemos que la implementación del método de la clase principal no es relevante, podemos anular ese método en la clase secundaria. Y la modificación de las funciones miembro según el requisito en la clase secundaria se conoce como anulación de métodos.

clase dos_ruedas :
def combustible (auto):
print( “el vehículo de dos ruedas necesita combustible para funcionar” )
capacidad de definición (auto):
print( "las bicicletas son aptas para un máximo de 2 personas" )

clase electric_bike (dos_ruedas):
def combustible (auto):
print( “las bicicletas eléctricas funcionan con batería” )
clase gasolina_bike ( dos_ruedas ):
def combustible (auto):
print( "la moto de gasolina funciona con gasolina" )
bicicleta=vehículo de dos ruedas()
ebike=bicicleta_electrica()
pbike=bicicleta_gasolina()

bicicleta.combustible()
bicicleta.capacidad()
ebike.combustible()
ebike.capacidad()
pbike.combustible()
pbike.capacidad()

En el código anterior, two_wheeler es la clase principal y electric_bike, petrol_bike son las clases secundarias. Y los métodos fuel(), capacity() son heredados por las clases secundarias electric_bike y petrol_bike. Ahora, podemos actualizar la implementación de los métodos si es necesario, y dentro de la clase electric_bike hemos vuelto a implementar el método fuel(), de manera similar, hemos vuelto a implementar el método fuel() en la clase petrol_bike.

Por ejemplo, en el código ebike.fuel() imprime "bicicletas eléctricas que funcionan con batería" y pbike.fuel() imprime que las bicicletas de gasolina funcionan con gasolina".

Polimorfismo en métodos de clase

Python permite que diferentes clases tengan el mismo nombre de método, y esto se incluye en la función de polimorfismo. Y la invocación del método se basa en el objeto que usamos para llamar al método.

bicicleta de clase :
def combustible (auto):
print( "¡La bicicleta no necesita combustible!" )
capacidad de definición (auto):
print( "las bicicletas son aptas para una sola persona" )

clase electric_bike :
def combustible (auto):
imprimir ( "las bicicletas eléctricas funcionan con batería" )
capacidad de definición (auto):
print( "Las bicicletas eléctricas son aptas para un máximo de 2 personas" )

clase gasolina_bike :
def combustible (auto):
print( "la moto de gasolina funciona con gasolina" )
capacidad de definición (auto):
print( “Las bicicletas de gasolina son aptas para un máximo de 2 personas” )

ecobike=bicicleta()
ebike=bicicleta_electrica()
pbike=bicicleta_gasolina()
l=[bicicleta ecológica,bicicleta eléctrica,bicicleta eléctrica]

para obj en l:
obj.combustible()
obj.capacidad()

En el código anterior, hemos creado tres objetos de las tres clases bicicleta, bicicleta_eléctrica y bicicleta_gasolina. Y las tres clases tienen los mismos nombres de métodos. Ahora, es tarea del compilador decidir qué método debe invocarse en función del tipo de objeto utilizado para invocar el método.

Por ejemplo, ecobike.fuel() invocará el método fuel() de la clase bicicleta y ebike.fuel() invocará el método fuel() de la clase electric_bike. Agregamos todos estos objetos a una lista y en cada iteración, vamos a llamar a los mismos nombres de función pero el tipo de objeto que invoca el método va a cambiar. En la primera iteración se llama a los métodos de la clase de bicicleta, y a los métodos de bicicleta_eléctrica, a gasolina_bicicleta en iteraciones posteriores.

Leer: Temas e ideas de proyectos de Python

Conclusión

En este artículo, hemos entendido lo que significa el polimorfismo, discutido cómo Python es diferente en el caso de la sobrecarga de métodos. Revisó demostraciones de varias posibilidades de polimorfismo en pitones, como sobrecarga de operadores, polimorfismo de funciones, anulación de métodos y polimorfismo en métodos de clase.

Ahora que conoce el polimorfismo en python, ¡implemente su próximo código python usando todas estas funciones!

Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Diploma PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1- on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.

Prepárate para una carrera del futuro

UPGRAD Y DIPLOMA PG EN CIENCIA DE DATOS DEL IIIT-BANGALORE
INSCRÍBETE AHORA @ ACTUALIZAR