polimorfismo-en-python

Cómo usar polimorfismo en Python

El polimorfismo es la capacidad de un objeto para tomar diferentes formas según el contexto.

En Python, esto se logra a través del “duck typing”, lo que básicamente significa que el funcionamiento de un objeto se determina por su comportamiento, en lugar de su tipo específico.

Vamos a verlo con un ejemplo. Supongamos que tenemos nuestra clase Persona.

# Definición de la clase Persona
class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad
    
    def saludar(self):
        print(f"Nombre: {self.nombre}, Edad: {self.edad}")

Y una o varias clases derivadas

# Definición de la clase Profesor que hereda de Persona
class Profesor(Persona):
    def __init__(self, nombre, edad):
        super().__init__(nombre, edad)        
    
    def saludar(self):
        print("Soy un profesor")
        
# Definición de la clase Estudiante que hereda de Persona
class Estudiante(Persona):
    def __init__(self, nombre, edad):
        super().__init__(nombre, edad)        
    
    def saludar(self):
        print("Soy un estudiante")

Por otro lado, supongamos que tenemos una función que recibe un parámetro

# Función que usa polimorfismo
def imprimir_informacion(persona):
    persona.saludar()

Ahora, creamos dos instancias de Profesor y Estudiante respectivamente, y se lo pasamos al método imprimir_informacion.

# Crear instancias de Persona y Estudiante
profesor = Profesor("María", 30)
estudiante = Estudiante("Juan", 20)

# Usar polimorfismo
imprimir_informacion(persona)     # Imprime 'Soy un profesor'
imprimir_informacion(estudiante)  # Imprime 'Soy un estudiante'

En este ejemplo,

  • La función imprimir_informacion puede aceptar objetos tanto de la clase Persona como de la clase Estudiante, o Profesor
  • La función llama al método saludar de cada objeto

Es decir, básicamente a Python “le da igual” el tipo del objeto que le pasas. Si tiene los métodos, la función llamará al método que tenga el objeto. Le da igual su tipo, o si heredan de una clase o o no. Sólo le interesa si tiene los métodos que necesita.