Herança Python OOP: classes pai e filho

Aprenda herança em Python OOP. Domine subclasses, métodos de substituição, usando super() e vários padrões de herança.

Experimente no Editor

Visão geral

A herança é um dos pilares fundamentais da Programação Orientada a Objetos (OOP). É um mecanismo que permite que uma nova classe (conhecida como filha ou subclasse) adote os atributos e métodos de uma classe existente (conhecida como pai ou superclasse). Esse padrão de design promove a reutilização de código, reduz a redundância e estabelece relacionamentos lógicos e hierárquicos entre os diferentes componentes do seu aplicativo.

Para implementar herança em Python, você passa o nome da classe pai entre parênteses durante a definição da classe filha: `class Child(Parent):`. A classe filha herda imediatamente todos os métodos e variáveis ​​da classe pai. Se o filho precisar de um comportamento personalizado, ele poderá substituir qualquer método pai redefinindo-o com o mesmo nome. Dentro de um método substituído, você ainda pode invocar a implementação do pai usando a função integrada `super()`, garantindo que você possa estender em vez de substituir completamente a lógica existente.

Ao contrário de muitas linguagens de tipo estaticamente, Python suporta nativamente herança múltipla, o que significa que uma classe filha pode herdar de mais de uma classe pai (por exemplo, `class SmartDevice(Camera, Phone):`). Para resolver qual método pai é executado quando os nomes entram em conflito, Python usa um algoritmo estrito chamado Ordem de Resolução de Método (MRO). Compreender como estruturar árvores de herança e usar super() é crucial para projetar arquiteturas extensíveis orientadas a objetos.

Saída de código e execução

Criando uma classe pai Vehicle e uma subclasse filha Car que substitui a inicialização usando super().

inheritance.py
Experimente no Editor
class Vehicle:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def display_info(self):
        return f"{self.year} {self.brand}"

class Car(Vehicle):
    def __init__(self, brand, year, model):
        # Call parent constructor
        super().__init__(brand, year)
        self.model = model

    def display_info(self):
        # Override parent method and extend it
        parent_info = super().display_info()
        return f"{parent_info} {self.model}"

my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())
Saída terminal
2026 Ford Mustang

Implementação passo a passo

  • Criando classes de exceção customizadas que herdam de Exception
  • Construindo componentes de UI (como botões) herdados de uma visualização genérica
  • Definição de modelos hierárquicos de banco de dados (por exemplo, Usuário, Funcionário, Gerente)

Perguntas frequentes

O que super() faz na subclasse?

super() retorna um objeto temporário da classe pai, permitindo chamar seus métodos, o que é particularmente útil para inicializar campos pai em __init__.

Você pode impedir que uma classe seja herdada?

Python não suporta uma palavra-chave 'final' como Java para restringir a herança. Convencionalmente, documentamos a intenção da classe ou usamos verificadores de tipo com anotações @final do módulo de digitação.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.