Capítulo 12: Herança e Polimorfismo 🦸♂️⚡
Neste capítulo, vamos aprender como uma classe pode herdar características de outra (Herança) e como objetos de classes diferentes podem responder ao mesmo método de formas diferentes (Polimorfismo), com o tema Liga da Justiça (DC)!
📖 O que é Herança e Polimorfismo?
- Herança: Permite que uma classe (Filha) herde atributos e métodos de outra classe (Pai). Evita repetição de código.
- Polimorfismo: Significa “muitas formas”. É a capacidade de um método ter comportamentos diferentes dependendo do objeto que o chama.
Veja o diagrama de herança da nossa Liga da Justiça:
classDiagram class Heroi { +nome +poder +usar_poder() } class Batman { +usar_poder() } class Superman { +usar_poder() } Heroi <|-- Batman Heroi <|-- Superman
📖 Exemplo Guiado: Super-Heróis
Vamos criar uma classe pai Heroi e duas classes filhas: Voador e Terrestre.
- Crie o arquivo
liga_justica.pyna pastasrc/:
# Classe Pai
class Heroi:
def __init__(self, nome, poder):
self.nome = nome
self.poder = poder
def usar_poder(self):
print(f"{self.nome} está usando seu poder!")
# Classe Filho (Herda de Heroi)
class Batman(Heroi):
def __init__(self):
super().__init__("Batman", "Inteligência e Gadgets")
# Polimorfismo (sobrescrevendo o método)
def usar_poder(self):
print(f"Batman usa seu cinto de utilidades e ataca com o Batrangue!")
class Superman(Heroi):
def __init__(self):
super().__init__("Superman", "Super Força e Visão de Calor")
def usar_poder(self):
print(f"Superman voa e usa sua visão de calor!")
# Testando
b = Batman()
s = Superman()
b.usar_poder()
s.usar_poder()🕹️ Como Executar e Testar no VS Code
- Abra o arquivo
liga_justica.py. - Clique no botão Run Python File.
Resultado Esperado:
Batman usa seu cinto de utilidades e ataca com o Batrangue!
Superman voa e usa sua visão de calor!🛠️ Prática Obrigatória 1: Velocistas
Crie uma classe Velocista que herda de Heroi. Adicione um método específico chamado correr() que exiba uma mensagem dizendo que o herói está correndo na velocidade da luz (ex: para o Flash).
🛠️ Prática Obrigatória 2: Lanterna Verde
Crie uma classe LanternaVerde que herda de Heroi. Sobrescreva o método usar_poder() para dizer que ele está criando um construto verde com o anel.
🔑 Gabarito de Código
Prática 1: velocistas.py
class Heroi:
def __init__(self, nome):
self.nome = nome
class Velocista(Heroi):
def correr(self):
print(f"{self.nome} está correndo na velocidade da luz!")
flash = Velocista("Flash")
flash.correr()Prática 2: lanterna_verde.py
class Heroi:
def __init__(self, nome):
self.nome = nome
def usar_poder(self):
pass
class LanternaVerde(Heroi):
def __init__(self):
super().__init__("Lanterna Verde")
def usar_poder(self):
print(f"{self.nome} cria um construto verde gigante com o anel!")
hal = LanternaVerde()
hal.usar_poder()📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
(Siga o mesmo padrão do Capítulo 01)