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.

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