El polimorfismo es uno de los cuatro pilares fundamentales de la programación orientada a objetos (junto con encapsulación, herencia y abstracción). En Python, el polimorfismo se refiere a la capacidad de objetos de diferentes clases de responder al mismo mensaje (método) de manera específica.
¿Qué significa polimorfismo?
La palabra "polimorfismo" viene del griego: "poli" (muchas) y "morphos" (formas). Literalmente significa "muchas formas".
En programación, esto se traduce en que:
Diferentes objetos pueden tener métodos con el mismo nombre
Cada objeto implementa el método de forma particular
Podemos tratar objetos de diferentes clases de manera uniforme
Ventajas del polimorfismo
Flexibilidad: Podemos agregar nuevas clases sin modificar el código existente
Reutilización: El mismo código funciona con diferentes tipos de objetos
Mantenibilidad: Código más limpio y fácil de entender
Extensibilidad: Fácil agregar nuevos comportamientos
Herencia en Python
La herencia es un mecanismo que permite crear nuevas clases basadas en clases existentes, permitiendo reutilizar código y establecer relaciones jerárquicas..
Sintaxis Básica
class ClasePadre:
# atributos y métodos de la clase padre
pass
class ClaseHija(ClasePadre): # Herencia simple
# atributos y métodos de la clase hija
pass
1. Herencia Simple
class Animal:
def __init__(self, nombre):
self.nombre = nombre
def hacer_sonido(self):
return "Sonido genérico"
def dormir(self):
return f"{self.nombre} está durmiendo"
class Perro(Animal): # Perro hereda de Animal
def hacer_sonido(self): # Sobrescritura de método
return "¡Guau!"
# Uso
mi_perro = Perro("Rex")
print(mi_perro.nombre) # Rex (heredado)
print(mi_perro.hacer_sonido()) # ¡Guau! (sobrescrito)
print(mi_perro.dormir()) # Rex está durmiendo (heredado)
2. Herencia Multinivel
class Vehiculo:
def __init__(self, marca):
self.marca = marca
def mover(self):
return "El vehículo se mueve"
class Coche(Vehiculo):
def __init__(self, marca, puertas):
super().__init__(marca)
self.puertas = puertas
def abrir_puertas(self):
return f"Abriendo {self.puertas} puertas"
class CocheElectrico(Coche):
def __init__(self, marca, puertas, autonomia):
super().__init__(marca, puertas)
self.autonomia = autonomia
def cargar_bateria(self):
return f"Cargando batería con {self.autonomia} km de autonomía"
# Uso
tesla = CocheElectrico("Tesla", 4, 500)
print(tesla.mover()) # Heredado de Vehiculo
print(tesla.abrir_puertas()) # Heredado de Coche
print(tesla.cargar_bateria()) # Propio de CocheElectrico
3. Herencia Múltiple
class Volador:
def volar(self):
return "Volando alto"
class Nadador:
def nadar(self):
return "Nadando rápido"
class Pato(Volador, Nadador): # Herencia múltiple
def hacer_sonido(self):
return "¡Cuac!"
# Uso
pato = Pato()
print(pato.volar()) # De Volador
print(pato.nadar()) # De Nadador
print(pato.hacer_sonido()) # Propio
4. Método super()
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def presentarse(self):
return f"Soy {self.nombre}, tengo {self.edad} años"
class Estudiante(Persona):
def __init__(self, nombre, edad, carrera):
super().__init__(nombre, edad) # Llama al constructor del padre
self.carrera = carrera
def presentarse(self):
base = super().presentarse() # Llama al método del padre
return f"{base} y estudio {self.carrera}"
# Uso
estudiante = Estudiante("Ana", 20, "Ingeniería")
print(estudiante.presentarse())
# Soy Ana, tengo 20 años y estudio Ingeniería
Comentarios
Publicar un comentario