Menu
Coddy logo textTech

Sobrescrita de Método Revisitada

Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 23 de 64.

Polimorfismo significa "muitas formas" e permite que objetos de diferentes classes respondam de maneira diferente à mesma chamada de método. A sobrescrita de método torna isso possível.

Aqui está uma classe pai com um método:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Crie classes filhas que sobrescrevem o mesmo método:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

Cada classe filha fornece sua própria implementação de speak().

Crie uma lista de diferentes animais:

animals = [Dog(), Cat(), Cow(), Animal()]

Chame o mesmo método em todos os objetos:

for animal in animals:
    print(animal.speak())

Saída:

Woof!
Meow!
Moo!
Animal makes a sound

Isso é polimorfismo em ação - a mesma chamada de método se comporta de forma diferente com base no tipo real do objeto.

Você também pode usar polimorfismo com funções:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Woof!
make_animal_speak(cat)  # Meow!

A função não precisa saber que tipo de animal recebe - ela apenas chama speak() e obtém o comportamento correto.

Ponto-chave: O polimorfismo permite tratar diferentes objetos da mesma maneira por meio de uma interface comum. A sobrescrita de método fornece diferentes implementações, enquanto o polimorfismo permite chamá-las uniformemente. Isso torna o código mais flexível e fácil de estender.

challenge icon

Desafio

Médio

Neste desafio, você implementará um sistema de herança de veículos.

Você precisará editar estes arquivos:

  • vehicle.py: Implemente a classe base Vehicle com atributos make/model e métodos
  • car.py: Crie a classe Car que herda de Vehicle
  • motorcycle.py: Crie a classe Motorcycle que herda de Vehicle
  • truck.py: Crie a classe Truck que herda de Vehicle

Cada arquivo contém comentários TODO detalhados para guiar sua implementação passo a passo. Preste atenção às instruções de importação necessárias entre os arquivos e siga as relações de herança. O arquivo driver.py contém casos de teste que verificarão se sua implementação funciona corretamente em todos os tipos de veículos.

Folha de consulta

O polimorfismo permite que objetos de diferentes classes respondam de forma diferente à mesma chamada de método por meio da sobrescrita de método.

Crie uma classe pai com um método:

class Animal:
    def speak(self):
        return "Animal makes a sound"

As classes filhas sobrescrevem o mesmo método:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

Chame o mesmo método em diferentes objetos:

animals = [Dog(), Cat(), Animal()]
for animal in animals:
    print(animal.speak())  # Cada um imprime uma saída diferente

Use o polimorfismo com funções:

def make_animal_speak(animal):
    print(animal.speak())

make_animal_speak(Dog())  # Woof!
make_animal_speak(Cat())  # Meow!

O polimorfismo permite tratar diferentes objetos da mesma maneira por meio de uma interface comum, tornando o código mais flexível e fácil de estender.

Experimente você mesmo

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck

def vehicle_info(vehicle):
    return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"


# Teste com diferentes veículos - NÃO MODIFIQUE ESTE CÓDIGO DE TESTE
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Object Oriented Programming