Herança em Python

0 – Python
5 – Orientada a Objetos (POO)
5.1 – Classes e objetos
5.2 – Herança (simples e múltipla)
5.3 – Polimorfismo
5.4 – Encapsulamento (público, _protegido, __privado)
5.5 – Métodos mágicos (__init__, __call__, __add__, etc.)
5.6 – Propriedades (@property, setter, deleter)
5.7 – Classes abstratas (ABC, abstractmethod)
5.8 – Metaclasses (type, __new__)
LEGENDA
Nivel_1
Nivel_2
Nivel_3

Herança permite criar uma nova classe a partir de uma existente. A classe filha herda atributos e métodos da classe mãe. Primeiramente, isso promove reutilização de código e hierarquias. Por exemplo, Caminhao e Moto herdam de Veiculo. Além disso, a classe filha pode sobrescrever ou adicionar novos métodos. A voz passiva é usada aqui: “os métodos são herdados automaticamente”. Quando utilizar herança? Quando há uma relação “é um” entre conceitos. Por exemplo, “Gato é um Animal” e “Cachorro é um Animal”. Python suporta herança simples (uma mãe) e múltipla (várias mães). Vamos explorar ambos os tipos com exemplos práticos. Três subtítulos guiarão você pelo universo da herança. Ao final, você dominará hierarquias de classes em Python.

Herança simples: estendendo classes

Herança simples envolve apenas uma classe mãe. Use class Filha(Mae): para declarar herança. O método super() chama o construtor da classe mãe. Quando usar herança simples? Em hierarquias lineares claras. Por exemplo, sistemas de funcionários ou formas geométricas. A voz passiva é aplicada: “os atributos são inicializados pela mãe”. Exemplo de herança simples:

A classe filha herda tudo que não foi sobrescrito. super() é essencial para inicializar corretamente a mãe.

Herança múltipla: combinando comportamentos

Herança múltipla permite uma classe herdar de várias mães. Use class Filha(Mae1, Mae2): para declarar. Python usa o MRO (Method Resolution Order) para resolver conflitos. Quando usar herança múltipla? Em mixins e interfaces. Por exemplo, combinando comportamentos como “Voador” e “Nadador”. A voz passiva é aplicada: “as classes são pesquisadas em ordem específica”. Exemplo de herança múltipla:

Herança múltipla é poderosa, mas use com moderação. Mixins são classes pequenas que adicionam comportamentos específicos.

Sobrescrita e super() em herança múltipla

super() funciona de forma especial em herança múltipla. Ele segue o MRO para chamar o próximo método na hierarquia. Isso permite que todos os pais sejam inicializados corretamente. Quando usar super()? Em praticamente todos os construtores. Também em métodos que querem estender (não substituir) o comportamento. A voz passiva é aplicada: “as chamadas são delegadas ao próximo na MRO”. Exemplo de super() em herança múltipla:

A fórmula do MRO para herança múltipla: \(\text{MRO}(C(B_1, B_2, …, B_n)) = [C] + \text{merge}(\text{MRO}(B_1), …, \text{MRO}(B_n), [B_1, …, B_n])\) Herança é uma ferramenta poderosa quando usada com sabedoria. Prefira composição sobre herança em casos duvidosos. Use herança para relações “é um” genuínas. Seu código será mais limpo e manutenível.

Deixe um comentário