Herencia

Modificación de métodos


Uno de los beneficios más potentes de la herencia es la posibilidad de modificar métodos heredados para que se comporten de forma diferente en una subclase. A este proceso se le llama sobrescritura de métodos (method overriding).


¿Qué es sobrescribir un método?

Consiste en redefinir un método heredado en la subclase, manteniendo el mismo nombre pero cambiando su implementación. Esto permite adaptar el comportamiento de una clase base a las necesidades específicas de la subclase.

Ejemplo:
class Animal:
    def hablar(self):
        print("Este animal hace un sonido.")

class Perro(Animal):
    def hablar(self):  # sobrescribimos el método
        print("¡Guau!")

animal = Animal()
animal.hablar()  # Salida: Este animal hace un sonido.

perro = Perro()
perro.hablar()   # Salida: ¡Guau!

Aunque Perro hereda de Animal, el método hablar() se ha redefinido. Python prioriza el método definido en la subclase, anulando el comportamiento original.


Importancia de la sobrescritura:

  • Permite personalizar el comportamiento sin modificar el código de la clase base.
  • Es esencial para implementar polimorfismo, donde múltiples clases pueden compartir una interfaz común, pero con comportamientos distintos.
  • Facilita la extensión del programa de forma controlada y predecible.

Llamar al método original con super():

A veces no queremos reemplazar completamente el método de la superclase, sino extenderlo. En esos casos, podemos utilizar super() para invocar la implementación original y luego añadir comportamiento adicional:

class Perro(Animal):
    def hablar(self):
        super().hablar()
        print("¡Pero yo soy un perro, así que digo: Guau!")

perro = Perro()
perro.hablar()

Este patrón es común cuando se necesita mantener parte del comportamiento de la clase base pero adaptarlo al contexto de la subclase.


Recomendaciones al sobrescribir métodos:

  • Asegúrate de mantener la misma firma del método (nombre y número de parámetros) al sobrescribirlo.
  • Utiliza super() cuando quieras extender y no reemplazar completamente el método heredado.
  • Documenta el método sobrescrito para que sea claro qué parte proviene de la clase base y qué ha sido modificado