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("Luis", 20)
# Usar polimorfismo
imprimir_informacion(persona) # Imprime 'Soy un profesor'
imprimir_informacion(estudiante) # Imprime 'Soy un estudiante'En este ejemplo,
- La función
imprimir_informacionpuede aceptar objetos tanto de la clasePersonacomo de la claseEstudiante, oProfesor - La función llama al método
saludarde 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.