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.
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().
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())2026 Ford MustangImplementaçã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
Uma introdução completa às classes, objetos, herança e conceitos OOP do Python. Crie modelos de dados robustos e dimensione seus aplicativos Python.
Polimorfismo Python OOPDomine o polimorfismo em Python. Aprenda como escrever código flexível e fracamente acoplado usando digitação duck, substituição de método e classes base abstratas.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Como classificar uma lista em Python
Aprenda como classificar uma lista em Python usando o método sort() e a função sorted(). Descubra exemplos de classificação de chaves personalizadas e ordem reversa.
Folha de dicas dos métodos de string Python
Um guia de referência completo para manipulação de strings em Python. Domine a formatação, pesquisa, divisão, substituição e verificação de propriedades de string.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.