Uso de super() en python

De ChuWiki


Uso de super() para Acceder a Métodos de la Clase Padre[editar]

La función super() se utiliza para llamar a métodos de una clase padre desde una subclase. Esto es especialmente útil cuando se necesita extender la funcionalidad de los métodos heredados.

Ejemplo Básico[editar]

Vamos a ver cómo usar super() en una jerarquía de clases.

Ejemplo de Clases con Herencia[editar]

class Animal:
    def __init__(self, nombre):
        self.nombre = nombre
        print(f"Animal creado: {self.nombre}")

    def hablar(self):
        print(f"{self.nombre} hace un sonido.")

class Perro(Animal):
    def __init__(self, nombre, raza):
        super().__init__(nombre)
        self.raza = raza
        print(f"Perro creado: {self.nombre}, raza: {self.raza}")

    def hablar(self):
        super().hablar()
        print(f"{self.nombre} dice: ¡Guau!")

class Gato(Animal):
    def __init__(self, nombre, color):
        super().__init__(nombre)
        self.color = color
        print(f"Gato creado: {self.nombre}, color: {self.color}")

    def hablar(self):
        super().hablar()
        print(f"{self.nombre} dice: ¡Miau!")

# Crear instancias de Perro y Gato
perro = Perro("Rex", "Labrador")
gato = Gato("Whiskers", "Gris")

# Llamar al método hablar de cada instancia
perro.hablar()
gato.hablar()

La clase padre es Animal. Tienen un constructor donde se le pasa el nombre del animal. Tiene un método hablar() donde saca un mensaje indicando que el animal ha hecho un sonido.

Tenemos luego dos clases hijas: Perro y Gato. En ellas, el constructor recibe la raza del animal (raza de perro o de gato) y su color. También sobre escribe el método hablar() de la clase padre para poner el sonido específico que hace el animal (guau o miau)

Finalmente, se instancian un perro y un gato y se les manda "hablar". La salida del programa sería la siguiente

Animal creado: Rex
Perro creado: Rex, raza: Labrador
Animal creado: Whiskers
Gato creado: Whiskers, color: Gris
Rex hace un sonido.
Rex dice: ¡Guau!
Whiskers hace un sonido.
Whiskers dice: ¡Miau!

Llamada a super() en el constructor[editar]

Los constructores de Perro y Gato llaman a super().__init__(nombre) para llamar al constructor de la clase padre Animal pasando el nombre. Esta llamada podemos hacerla en cualquier parte del constructor, no necesariamente en la primera línea o incluso no hacerla. Unicamente, hay que tener en cuenta que el constructor de Animal es el que crea el atributo nombre de la clase padre Animal. Si no llamamos al constructor, no existirá ese atributo, por lo que no podremos usarlo.

Llamada a super() en los métodos[editar]

En Perro y Gato hemos sobre escrito el método hablar(). Llamamos a super().hablar() y luego hacemos cosas aparte. Esto hará que se saque por pantalla tanto lo que pone la clase Animal como lo que hemos añadido en Perro y Gato.