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 Perro
Salida de Consola!:
Fido está haciendo un sonido.
Fido está ladrando: ¡Guau, guau!
  • ¿Qué hace este código?:
    • Define una clase Animal con un constructor __init__ que inicializa el atributo nombre y un método hacer_sonido.
    • Define una clase Perro que hereda de Animal y agrega un nuevo método ladrar.
    • Se crea un objeto mi_perro de la clase Perro. Este objeto puede usar tanto el método heredado hacer_sonido como el método específico ladrar.

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 Gato que hereda de Animal, pero sobrescribe el método hacer_sonido para que el gato maúlle en lugar de hacer un sonido genérico.
    • Cuando se llama al método hacer_sonido en el objeto mi_gato, se ejecuta el método sobrescrito en lugar del original.

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 Perro sobrescribe el método hacer_sonido, pero también llama al método original de la clase Animal usando super().
    • El constructor de la subclase también usa super().__init__(nombre) para inicializar el nombre utilizando el constructor de la clase padre.

¿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...