La función super() en Python
Funciones integradas de Python3
super()Es una función integrada en Python que se utiliza para llamar a métodos de la clase padre (superclase).
En la herencia de clases,super()te permite llamar a métodos de la clase padre, logrando la reutilización de código y la extensión de métodos. Es una función muy importante en la programación orientada a objetos de Python.
Significado de la palabra: superSignifica "súper", y aquí se refiere a la clase padre o superclase.
Sintaxis básica y parámetros
Formato de sintaxis
super() super(type, object-or-type)
Descripción de parámetros
- Parámetro type:
- Tipo: clase
- Descripción: la clase de la cual se obtiene el Proxy de la clase padre.
- Parámetro object-or-type:
- Tipo: objeto o clase
- Descripción: debe ser una instancia o subclase de type.
Descripción de la función
- Valor de retorno: devuelve un objeto proxy, utilizado para llamar a los métodos de la clase padre.
- Características: admite el orden de resolución de métodos (MRO), lo que permite manejar correctamente la herencia múltiple.
Ejemplos
Ejemplo 1: Llamar al constructor de la clase padre en una subclase
Ejemplo
class Animal:
def __init__(self, name):
self.name = name
print(f"El animal {self.name} ha nacido")
def speak(self):
print("El animal hace un sonido")
# Subclase
class Dog(Animal):
def __init__(self, name, breed):
# Llamar al __init__ de la clase padre
super().__init__(name)
self.breed = breed
print(f"La raza es {self.breed}")
def speak(self):
# Llamar al método de la clase padre
super().speak()
print("¡Guau, guau!")
# Prueba
dog = Dog("Xiaobai", "Husky")
# Salida:
# El animal Xiaobai ha nacido
# La raza es Husky
dog.speak()
# Salida:
# El animal hace un sonido
# ¡Guau, guau!
Resultado esperado de la ejecución:
El animal Xiaobai nació La raza es Husky El animal hace un sonido ¡Guau guau!
Análisis del código:
super().__init__(name)Llama al constructor de la clase padre.super().speak()Llama al método de la clase padre.- De esta manera, se puede extender la funcionalidad de la clase padre en la subclase.
Ejemplo 2: Herencia múltiple
Ejemplo
class A:
def method(self):
print("A.method")
class B(A):
def method(self):
print("B.method")
super().method() # Llamar a A.method
class C(A):
def method(self):
print("C.method")
super().method() # Llamar a A.method
class D(B, C):
def method(self):
print("D.method")
super().method() # Llamar según el orden MRO
# MRO: D -> B -> C -> A
d = D()
d.method()
# Salida:
# D.method
# B.method
# C.method
# A.method
# Ver el MRO
print(D.__mro__)
Resultado esperado de la ejecución:
D.method B.method C.method A.method (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
Análisis del código:
super()Se llama según el MRO (orden de resolución de métodos).- Esto asegura la correcta herencia múltiple.
Ejemplo 3: Sin usar parámetros (recomendado)
Ejemplo
class Parent:
def greet(self, name):
return f"¡Hola, {name}!"
class Child(Parent):
def greet(self, name):
# Llamar al método de la clase padre y extenderlo
message = super().greet(name)
return message + " ¡Bienvenido de nuevo!"
child = Child()
print(child.greet("Tom"))
# Salida: ¡Hola, Tom! ¡Bienvenido de nuevo!
Resultado esperado de la ejecución:
Al ejecutarlo en un entorno real, se mostrará el saludo extendido.
super()Es una función clave para implementar la herencia de clases y el polimorfismo en Python.
Funciones integradas de Python3
Otras extensiones