En Python, super() es una función incorporada que se utiliza para llamar a un método de una clase padre. Es especialmente útil en la herencia de clases cuando quieres extender o modificar el comportamiento de un método de la superclase (clase padre) en la subclase (clase hija). super() también es crucial para la correcta inicialización de las subclases.
Para entender cómo se puede usar super() con métodos e inicialización de clases, utilicemos el ejemplo de animales haciendo sonidos. Crearemos una clase Animal y dos subclases, Dog y Cat.
class Animal: # Definir una clase llamada 'Animal'
def __init__(self, species):
self.species = species
def speak(self):
return 'Sounds...'
class Dog(Animal): # Definir una subclase llamada 'Dog' que hereda de 'Animal'
def __init__(self, name):
super().__init__('Dog') # Llamar al método '__init__' del padre usando 'super()'
self.name = name # Atributo adicional 'name' para 'Dog'
print(self.species) # Imprimirá Dog
def speak(self):
original = super().speak() # Llamar al método 'speak' del padre usando 'super()'
return original + ' Woof!'
class Cat(Animal): # Definir una subclase llamada 'Cat' que hereda de 'Animal'
def __init__(self, name):
super().__init__('Cat') # Llamar al método '__init__' del padre usando 'super()'
self.name = name # Atributo adicional 'name' para 'Cat'
def speak(self):
original = super().speak() # Llamar al método 'speak' del padre usando 'super()'
return original + ' Meow!'
dog = Dog('Rex') # Crear una instancia de la clase 'Dog'
cat = Cat('Fluffy') # Crear una instancia de la clase 'Cat'
print(dog.name, dog.species, dog.speak()) # Rex Dog Sounds... Woof!
print(cat.name, cat.species, cat.speak()) # Fluffy Cat Sounds... Meow!
Aquí, tanto las subclases Dog como Cat utilizan super().__init__() para llamar al método __init__() de su superclase Animal. Esto asegura que cada instancia de Dog o Cat esté correctamente inicializada con el nombre de especie respectivo. De manera similar, el método speak() en ambas subclases utiliza super().speak() para llamar al método speak() de Animal, permitiéndoles incluir el sonido original del animal en sus propios métodos speak().
Así, la función super() permite que una subclase aproveche y extienda el comportamiento de su superclase. Juega un papel crucial en mejorar la reutilización del código, asegurando la correcta inicialización de las subclases y manteniendo tu código modular y legible. Esto lo convierte en una herramienta poderosa en la programación orientada a objetos con Python.
Desafío: Clases de Vehículos
Se te ha asignado crear clases para diferentes tipos de vehículos. Estas clases deben simular algunas propiedades y comportamientos de vehículos del mundo real.
Clase Vehicle: La clase base. Debe tener los siguientes atributos:
make: represents the manufacturer of the vehicle.
model: represents the specific model of the vehicle.
year: represents the year the vehicle was manufactured.
A method named honk() that, when called, prints the string Honk!.
Clase Car: Esta clase debe heredar de la clase Vehicle. Debe tener todos los atributos y métodos de la clase Vehicle, más lo siguiente:
color: represents the color of the car.
It should override the honk() method of the Vehicle class.
When called, this method should print the string Beep beep!.
Clase Bicycle: Esta clase también debe heredar de la clase Vehicle. Debe tener todos los atributos y métodos de la clase Vehicle, pero necesita sobrescribir el método honk().
Cuando se llame, este método debe imprimir Ring ring!.