Uso de super() en python
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.