No Python, super() é uma função embutida usada para chamar um método da classe pai. É especialmente útil na herança de classes quando você quer estender ou modificar o comportamento de um método da superclasse na subclasse. O super() também é crucial para a inicialização adequada das subclasses.
Para entender como o super() pode ser usado com métodos e inicialização de classes, vamos usar o exemplo de animais emitindo sons. Vamos criar uma classe Animal e duas subclasses, Dog e Cat.
class Animal: # Define uma classe chamada 'Animal'
def __init__(self, species):
self.species = species
def speak(self):
return 'Sounds...'
class Dog(Animal): # Define uma subclasse chamada 'Dog' que herda de 'Animal'
def __init__(self, name):
super().__init__('Dog') # Chama o método '__init__' do pai usando 'super()'
self.name = name # Atributo adicional 'name' para 'Dog'
print(self.species) # Irá imprimir 'Dog'
def speak(self):
original = super().speak() # Chama o método 'speak' do pai usando 'super()'
return original + ' Woof!'
class Cat(Animal): # Define uma subclasse chamada 'Cat' que herda de 'Animal'
def __init__(self, name):
super().__init__('Cat') # Chama o método '__init__' do pai usando 'super()'
self.name = name # Atributo adicional 'name' para 'Cat'
def speak(self):
original = super().speak() # Chama o método 'speak' do pai usando 'super()'
return original + ' Meow!'
dog = Dog('Rex') # Cria uma instância da classe 'Dog'
cat = Cat('Fluffy') # Cria uma instância da classe 'Cat'
print(dog.name, dog.species, dog.speak()) # Rex Dog Sounds... Woof!
print(cat.name, cat.species, cat.speak()) # Fluffy Cat Sounds... Meow!
Aqui, tanto as subclasses Dog quanto Cat usam super().__init__() para chamar o método __init__() da sua superclasse Animal. Isso garante que cada instância de Dog ou Cat seja corretamente inicializada com o respectivo nome da espécie. Da mesma forma, o método speak() em ambas as subclasses usa super().speak() para chamar o método speak() de Animal, permitindo que incluam o som original do animal em seus próprios métodos speak().
Portanto, a função super() permite que uma subclasse aproveite e estenda o comportamento de sua superclasse. Ela desempenha um papel crucial ao melhorar a reutilização de código, garantindo a inicialização adequada das subclasses e mantendo seu código modular e legível. Isso faz dela uma ferramenta poderosa na programação orientada a objetos com Python.
Desafio: Classes de Veículos
Você foi encarregado de criar classes para diferentes tipos de veículos. Essas classes devem simular algumas propriedades e comportamentos de veículos do mundo real.
Classe Vehicle: A classe base. Deve ter os seguintes 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!.
Classe Car: Esta classe deve herdar da classe Vehicle. Deve ter todos os atributos e métodos da classe Vehicle, além do seguinte:
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!.
Classe Bicycle: Esta classe também deve herdar da classe Vehicle. Deve ter todos os atributos e métodos da classe Vehicle, mas precisa sobrescrever o método honk().
Quando chamado, este método deve imprimir Ring ring!.