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

# Clase padre
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:

  1. super().__init__(name)Llama al constructor de la clase padre.
  2. super().speak()Llama al método de la clase padre.
  3. De esta manera, se puede extender la funcionalidad de la clase padre en la subclase.

Ejemplo 2: Herencia múltiple

Ejemplo

# Ejemplo de herencia múltiple
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

# Uso recomendado en Python 3: sin necesidad de parámetros
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