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 soundIsso é 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.
Desafio
MédioNeste desafio, você implementará um sistema de herança de veículos.
Você precisará editar estes arquivos:
vehicle.py: Implemente a classe baseVehiclecom atributosmake/modele métodoscar.py: Crie a classeCarque herda deVehiclemotorcycle.py: Crie a classeMotorcycleque herda deVehicletruck.py: Crie a classeTruckque herda deVehicle
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 diferenteUse 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))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
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário