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 RetrieverUtiliza 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 perroLlama 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.
Desafío
IntermedioEn 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 ageemployee.py: Contiene la clase Employee que hereda de Persondriver.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 = breedUso 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 behaviorSin 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()Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias