Python/Orientação a Objetos/Herança e Polimorfismo
Python⏱ ~2 min de leitura

Herança e Polimorfismo

Reuso de código e sobrescrita de métodos

Python suporta herança simples e múltipla. Uma subclasse herda todos os atributos e métodos da classe pai. super() referencia a classe pai sem precisar citar o nome explicitamente, tornando o código mais robusto a refatorações.

Python usa MRO (Method Resolution Order) para resolver conflitos em herança múltipla — o algoritmo C3 garante uma ordem consistente e previsível. isinstance() verifica se um objeto é instância de uma classe ou subclasse.

Polimorfismo em Python é baseado em duck typing: "se anda como pato e grasna como pato, é um pato". Não é necessário herança formal para polimorfismo — basta implementar os mesmos métodos.

Exemplo.java
class Animal:
    def __init__(self, nome):
        self.nome = nome

    def falar(self):
        raise NotImplementedError

    def __str__(self):
        return f"{self.__class__.__name__}({self.nome})"

class Cachorro(Animal):
    def falar(self):
        return f"{self.nome} diz: Au!"

    def buscar(self):
        return f"{self.nome} trouxe a bola!"

class Gato(Animal):
    def falar(self):
        return f"{self.nome} diz: Miau!"

# Polimorfismo
animais = [Cachorro("Rex"), Gato("Whiskers"), Cachorro("Buddy")]
for animal in animais:
    print(animal.falar())

# isinstance e issubclass
rex = Cachorro("Rex")
print(isinstance(rex, Cachorro))  # True
print(isinstance(rex, Animal))    # True
print(issubclass(Cachorro, Animal))  # True

# Herança múltipla
class Voador:
    def voar(self):
        return "voando!"

class Pato(Animal, Voador):
    def falar(self):
        return "Quack!"

# MRO
print(Pato.__mro__)
💡 Dica pro

Prefira composição à herança quando a relação não é claramente "é um tipo de" — herança cria acoplamento forte.

Recompensa+40 XP+exercícios