Polimorfismo con Python

Antes de comenzar a hablar sobre el polimorfismo en Python, es conveniente que sepamos cómo está compuesta esta palabra:

  • Poli → polys → ‘muchas’
  • -morfi → morfo → ‘formas’
  • -ismo → ismo → ‘sistema’

El polimorfismo en Python es la capacidad o habilidad que tienen los objetos en diferentes clases para usar los métodos o atributos con el mismo nombre pero valores diferentes.

Puedes conocer más sobre las clases en Python.

Polimorfismo con clases de Python

Vamos a ver un ejemplo que seguro nos aclara todo mucho más. Crearemos dos clases y en cada una de ellas un método con el mismo nombre.

class Consolas:
    boton_encendido = 'pulsador'
    def encender(self):
        return f'Encendemos la consola mediante el {pulsador}'

class Cafeteras:
    boton_encendido = 'interruptor'
    def encender(self):
        return f'Encendemos la cafetera mediante el {self.boton_encendido}'

mi_consola = Consolas()
mi_cafetera = Cafeteras()

print(mi_consola.encender())
print(mi_cafetera.encender())

# Encendemos la consola mediante el pulsador
# Encendemos la cafetera mediante el interruptor

Desde nuestro objeto podemos acceder a esos métodos sin ningún problema.

Herencia y polimorfismo

Ahora veremos cómo podemos acceder de igual forma a métodos que se llamen igual, aun heredando una clase de otra y llamándose con el mismo nombre.

class Consolas:
    boton_encendido = 'pulsador'
    def encender(self):
        return f'Encendemos la consola mediante el {self.boton_encendido}'

class Portatiles(Consolas):
    boton_encendido = 'on'
    def encender(self):
        return f'Encendemos la consola portátil mediante el botón de {self.boton_encendido}'

mi_portatil = Portatiles()

print(mi_portatil.encender())
# Encendemos la consola portátil mediante el botón de on

En este ejemplo vemos claramente que, aun existiendo el método encender() en las dos clases, se ejecuta el de la clase secundaria.

Polimorfismo por función

Vamos a crear un ejemplo para ver el polimorfismo por función en el que la propia función muestra_info(), a la que enviamos nuestro objeto, será la encargada de detectar a qué métodos tiene que llamar.

class Gameboy:
    def tipo(self):
        print('portátil')
    def color(self):
        print('gris')
        
class Ngage:
    def tipo(self):
        print('dispositivo móvil')
    def color(self):
        print('naranja')

def muestra_info(objeto):
    return objeto.tipo(), objeto.color()

mi_consola = Gameboy()
muestra_info(mi_consola)
# portátil
# gris

otra_consola = Ngage()
muestra_info(otra_consola)
# dispositivo móvil
# naranja

Podemos ver que desde la función muestra_info() estamos llamando a dos métodos, el método tipo() y el método color(), pero sin especificar de qué clase.

Este es un enlace a la documentación sobre clases en Python.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *