Conceitos Básicos de Python: Programação Orientada a Objetos (OOP)
Introdução à Herança
Lesson 3 of 7 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
Herança é um dos conceitos centrais da Programação Orientada a Objetos (OOP).
Ela permite que uma classe (chamada de filha ou subclasse) herde os atributos e métodos de outra classe (chamada de pai ou superclasse).
Isso significa que você pode definir comportamentos e dados comuns em uma classe base, e então criar classes mais especializadas que reutilizam e personalizam essa funcionalidade — sem precisar reescrever o mesmo código.
Sintaxe Básica para Herança
Em Python, a herança é implementada especificando o nome da classe pai entre parênteses após o nome da classe filha.
class ParentClass:
# Atributos e métodos da classe pai
class ChildClass(ParentClass):
# Atributos e métodos da classe filha
````
Quando uma classe filha herda de uma classe pai, ela recebe:
* Todos os **atributos** do pai (variáveis associadas ao objeto)
* Todos os **métodos** do pai (funções associadas ao objeto)
* Qualquer **construtor** (`__init__`) que a classe pai possua
---
# Exemplo: Animais e Sons
Vamos trazer a herança para um exemplo com que todos podemos nos identificar — animais.
Começaremos com uma classe geral `Animal` que define o que todos os animais têm em comum, e então criaremos tipos específicos de animais (`Dog` e `Cat`) que compartilham essas características, mas fazem sons diferentes.
Aqui está a classe base:
```python
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def sound(self):
pass # Vamos deixar que cada animal específico decida seu próprio som
````
A classe `Animal` tem:
* Um método `__init__` que configura o `name` e `age` para cada animal.
* Um método `sound()` que ainda não faz nada (`pass` é apenas um espaço reservado).
Vamos substituí-lo em cada tipo de animal com o som que a espécie emite.
---
Agora, vamos criar duas classes específicas de animais:
```python
class Dog(Animal):
def sound(self):
print("Woof woof!")
class Cat(Animal):
def sound(self):
print("Meow!")
Aqui está o que está acontecendo:
- Tanto
DogquantoCatherdam deAnimal, então eles automaticamente possuem os atributosnameeagesem precisarmos reescrever esse código. - Cada um sobrescreve o método
sound()para emitir seu som único.
Criando e Usando os Objetos
dog = Dog("Rex", 2)
cat = Cat("Mimi", 3)
print(dog.name) # Rex
dog.sound() # Woof woof!
print(cat.name) # Mimi
cat.sound() # Meow!
Quando criamos Dog("Rex", 2), o que acontece passo a passo é:
- Python chama o método
__init__da classeAnimal(porqueDognão tem um próprio). - Os valores
nameeageque passamos são armazenados naquele novo objeto. - Quando chamamos
dog.sound(), Python procura primeiro um métodosound()emDog. Ele encontra o que escrevemos lá e executa — imprimindo"Woof woof!".
A mesma lógica vale para Cat, que encontra e executa seu próprio método sound().
Este exemplo mostra a magia da herança:
- Escrevemos apenas uma vez a configuração comum (
__init__), na classeAnimal. - Cada subclasse (
Dog,Cat) mantém as características compartilhadas e adiciona seu próprio comportamento único. - O resultado é menos código repetitivo, lógica mais organizada e uma maneira mais fácil de gerenciar objetos relacionados.
3. Como Isto Funciona
- Estrutura compartilhada: O método
__init__da classeAnimalé executado quando você cria um objetoDogouCat, pois eles o herdam automaticamente. - Sobrescrita de método: Tanto
DogquantoCattêm seus próprios métodossound()que substituem (override) o espaço reservado da classeAnimal. Quando você chamasound()em umDog, o Python usa o método definido emDog, não o da classeAnimal.
DICA: Se uma classe filha não sobrescrever um método, ela automaticamente usa o método da classe pai.
Por Que Usar Herança?
A herança permite:
- Evitar repetir código colocando a lógica compartilhada em uma única classe base.
- Tornar seu código mais modular e legível.
- Construir classes especializadas a partir de uma planta geral.
Exemplo de pensamento em herança:
Animal→ planta geral comname,age, e um métodosound().Dog→ tipo específico de animal com som único.Cat→ outro tipo específico de animal com som diferente.
Conclusão
Herança é uma ferramenta poderosa na OOP para criar hierarquias de classes, partindo de conceitos gerais e avançando para os mais especializados.
Em Python, você a implementa:
- Escrevendo uma classe pai com atributos e métodos comuns.
- Criando classes filhas que listam o nome da classe pai entre parênteses.
- Adicionando ou sobrescrevendo métodos nas classes filhas conforme necessário.
Na próxima lição, vamos aprofundar esse conceito explorando o super() — uma forma para as classes filhas chamarem e estenderem o comportamento de suas classes pai.