Menu
Coddy logo textTech

La función super()

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 18 de 64.

La función super() permite que una clase hija llame a métodos de su clase padre. Esto le permite extender la funcionalidad del padre en lugar de reemplazarla por completo.

Aquí hay un ejemplo del uso de super() en el constructor:

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

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Llamar al __init__ del padre
        self.breed = breed
        print(f"Dog breed set: {breed}")

Crea un objeto dog:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

Salida:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

Utiliza super() para extender los métodos del padre:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Llama primero al método del padre
        print("Woof!")        # Añade comportamiento específico del perro

Llama al método extendido:

buddy = Dog()
buddy.make_sound()

Salida:

Generic animal sound
Woof!

Sin super(), perderías la funcionalidad del padre:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # Solo el sonido del gato, el método del padre es ignorado

cat = Cat()
cat.make_sound()

Salida:

Meow!

Punto clave: Utiliza super() para llamar a métodos de la clase padre desde clases hijas. Esto te permite extender la funcionalidad en lugar de reemplazarla por completo. Los usos comunes incluyen llamar a los métodos __init__ del padre y extender el comportamiento del padre.

challenge icon

Desafío

Intermedio

En este desafío, implementarás una jerarquía de clases Person y Employee usando herencia.

  • person.py: Contiene la clase Person con los atributos name y age
  • employee.py: Contiene la clase Employee que hereda de Person
  • driver.py: Archivo principal para probar tu implementación

Cada archivo contiene comentarios TODO detallados para guiarte a través de la implementación.

Hoja de referencia

La función super() permite que una clase hija llame a métodos de su clase madre, extendiendo la funcionalidad en lugar de reemplazarla.

Uso de super() en constructores:

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Call parent's __init__
        self.breed = breed

Uso de super() para extender métodos:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Call parent's method first
        print("Woof!")        # Add child-specific behavior

Sin super(): Los métodos de la clase hija reemplazan completamente la funcionalidad de la clase madre en lugar de extenderla.

Pruébalo tú mismo

# TODO: Importar la clase Person desde person.py
# TODO: Importar la clase Employee desde employee.py

def main():
    # TODO: Crear un objeto Person con el nombre "Alice" y la edad 30
    person = None
    
    # TODO: Crear un objeto Employee con el nombre "Bob", la edad 35 y el trabajo "Developer"
    employee = None
    
    # TODO: Llamar al método introduce() en el objeto Person
    # Resultado esperado: "Hi, I'm Alice and I'm 30 years old"
    
    # TODO: Imprimir una línea en blanco para el espaciado - print()
    
    # TODO: Llamar al método introduce() en el objeto Employee
    # Resultado esperado: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming