Curso de python nivel medio
¿Qué es la herencia?
La herencia es un concepto clave en la programación orientada a objetos que permite crear una nueva clase basada en una clase existente. La nueva clase, llamada clase hija o subclase, hereda atributos y métodos de la clase original, llamada clase padre o superclase. Esto permite reutilizar el código y extender la funcionalidad de las clases existentes.
¿Cómo funciona la herencia en Python?
En Python, puedes crear una subclase simplemente pasando la clase padre como argumento al definir la nueva clase. La subclase hereda automáticamente todos los atributos y métodos de la clase padre, pero también puedes agregar nuevos atributos y métodos o modificar los existentes.
Ejemplo básico de herencia
Vamos a ver un ejemplo de cómo funciona la herencia:
1# Clase padre 2class Animal: 3 def __init__(self, nombre): 4 self.nombre = nombre 5 6 def hacer_sonido(self): 7 print(f"{self.nombre} está haciendo un sonido.") 8 9# Clase hija que hereda de Animal 10class Perro(Animal): 11 def ladrar(self): 12 print(f"{self.nombre} está ladrando: ¡Guau, guau!") 13 14# Crear un objeto de la clase Perro 15mi_perro = Perro("Fido") 16 17# Usar métodos de la clase padre y de la clase hija 18mi_perro.hacer_sonido() # Método heredado de la clase Animal 19mi_perro.ladrar() # Método de la clase PerroSalida de Consola!: Fido está haciendo un sonido. Fido está ladrando: ¡Guau, guau!
- ¿Qué hace este código?:
- Define una clase
Animalcon un constructor__init__que inicializa el atributonombrey un métodohacer_sonido. - Define una clase
Perroque hereda deAnimaly agrega un nuevo métodoladrar. - Se crea un objeto
mi_perrode la clasePerro. Este objeto puede usar tanto el método heredadohacer_sonidocomo el método específicoladrar.
- Define una clase
Sobrescribir métodos en la subclase
Puedes sobrescribir un método de la clase padre en la subclase para cambiar su comportamiento.
1# Clase padre 2class Animal: 3 def __init__(self, nombre): 4 self.nombre = nombre 5 6 def hacer_sonido(self): 7 print(f"{self.nombre} está haciendo un sonido.") 8 9# Clase hija que sobrescribe el método hacer_sonido 10class Gato(Animal): 11 def hacer_sonido(self): 12 print(f"{self.nombre} está maullando: ¡Miau, miau!") 13 14# Crear un objeto de la clase Gato 15mi_gato = Gato("Mish") 16 17# Usar el método sobrescrito en la clase hija 18mi_gato.hacer_sonido()Salida de Consola!: Mish está maullando: ¡Miau, miau!
- ¿Qué hace este código?:
- Define la clase
Gatoque hereda deAnimal, pero sobrescribe el métodohacer_sonidopara que el gato maúlle en lugar de hacer un sonido genérico. - Cuando se llama al método
hacer_sonidoen el objetomi_gato, se ejecuta el método sobrescrito en lugar del original.
- Define la clase
Llamar a métodos de la clase padre con super()
Puedes usar la función super() en la subclase para llamar a métodos de la clase padre.
1class Animal: 2 def __init__(self, nombre): 3 self.nombre = nombre 4 5 def hacer_sonido(self): 6 print(f"{self.nombre} está haciendo un sonido.") 7 8class Perro(Animal): 9 def __init__(self, nombre, raza): 10 super().__init__(nombre) 11 self.raza = raza 12 13 def hacer_sonido(self): 14 super().hacer_sonido() 15 print(f"{self.nombre} ({self.raza}) está ladrando: ¡Guau, guau!") 16 17# Crear un objeto de la clase Perro 18mi_perro = Perro("Fido", "Labrador") 19 20# Usar el método sobrescrito que también llama al método de la clase padre 21mi_perro.hacer_sonido()Salida de Consola!: Fido está haciendo un sonido. Fido (Labrador) está ladrando: ¡Guau, guau!
- ¿Qué hace este código?:
- La clase
Perrosobrescribe el métodohacer_sonido, pero también llama al método original de la claseAnimalusandosuper(). - El constructor de la subclase también usa
super().__init__(nombre)para inicializar el nombre utilizando el constructor de la clase padre.
- La clase
¿Por qué usar la herencia?
La herencia es útil porque:
- Reutiliza código: Evita la duplicación al permitir que las subclases hereden código común de las clases padres.
- Organiza el código: Agrupa funcionalidad similar en clases relacionadas, haciendo que el código sea más fácil de mantener.
- Facilita la extensión: Permite agregar o modificar funcionalidades en clases existentes sin cambiar el código original.
Conclusión
La herencia es una herramienta poderosa en la programación orientada a objetos que te permite crear nuevas clases basadas en clases existentes. Al usar la herencia, puedes aprovechar el código ya escrito y extenderlo para adaptarlo a nuevas necesidades. ¡Practica creando tus propias clases con herencia para ver cómo puedes reutilizar y extender el código de manera efectiva en tus programas!
- Loading...