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.
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árioSistema de EmpréstimosFuncionalidade de BuscaInterface AdministrativaTestes e Integração