Bem-vindo ao Blog da DMarkInfo

Um espaço exclusivo para compartilhar conteúdos e novidades sobre Tecnologia da Informação. Aqui você encontra artigos, tutoriais e análises para se manter atualizado no mundo da TI.

Herança em Python: Guia Completo com Exemplos

Postado por Eduardo Marques em 30/09/2025
Herança em Python: Guia Completo com Exemplos

Quando falamos de programação orientada a objetos, a herança é um dos recursos mais importantes para estruturar e organizar sistemas. Em Python, ela permite criar novas classes a partir de outras já existentes, aproveitando atributos e métodos prontos e ao mesmo tempo oferecendo flexibilidade para acrescentar ou modificar comportamentos. Isso torna o código mais limpo, reutilizável e fácil de manter em projetos de qualquer tamanho.

Neste artigo, vamos explorar desde os conceitos básicos até exemplos práticos de herança em Python.

O que é Herança?

Na POO, herança significa criar uma nova classe (chamada de classe derivada ou subclasse) que herda características de uma classe existente (chamada de classe base ou superclasse).

Classe base (superclasse): fornece atributos e métodos.

Classe derivada (subclasse): herda os atributos e métodos da base, podendo utilizá-los, modificá-los ou adicionar novos.

Exemplo Básico de Herança em Python

# Classe base
class Pessoa:
   def __init__(self, nome, idade):
       self.nome = nome
       self.idade = idade
   
   def apresentar(self):
       return f"Olá, meu nome é {self.nome} e tenho {self.idade} anos."

# Classe derivada
class Estudante(Pessoa):
   def __init__(self, nome, idade, curso):
       # Chamando o construtor da superclasse
       super().__init__(nome, idade)
       self.curso = curso
   
   def apresentar(self):
       return f"Sou {self.nome}, tenho {self.idade} anos e estudo {self.curso}."

# Testando
p1 = Pessoa("Carlos", 40)
print(p1.apresentar())

e1 = Estudante("Ana", 22, "Engenharia")
print(e1.apresentar())
 

Saída:
Olá, meu nome é Carlos e tenho 40 anos.
Sou Ana, tenho 22 anos e estudo Engenharia.

Aqui, a classe Estudante herda de Pessoa, mas sobrescreve o método apresentar().

O papel do super()

O método super() permite chamar métodos e atributos da classe base dentro da subclasse.
No exemplo anterior, usamos super().init(nome, idade) para reaproveitar o construtor da classe Pessoa, evitando repetir código.

Herança Múltipla

Em Python, uma classe pode herdar de mais de uma superclasse. Isso é chamado de herança múltipla.

class Trabalhador:
   def trabalhar(self):
       return "Estou trabalhando."

class Estudioso:
   def estudar(self):
       return "Estou estudando."

# Herança múltipla
class Estagiario(Trabalhador, Estudioso):
   pass

e = Estagiario()
print(e.trabalhar())
print(e.estudar())
 

Saída:
Estou trabalhando.
Estou estudando.

O estagiário herda tanto de Trabalhador quanto de Estudioso.

O MRO (Method Resolution Order)

Quando usamos herança múltipla, o Python segue uma ordem de busca de métodos e atributos chamada MRO (Method Resolution Order).

print(Estagiario.mro())

Isso mostra a ordem em que o Python procura os métodos.

Classes Abstratas

Em alguns casos, queremos apenas definir um contrato para que as subclasses implementem certos métodos. Para isso, usamos classes abstratas com o módulo abc.

from abc import ABC, abstractmethod

class Animal(ABC):
   @abstractmethod
   def emitir_som(self):
       pass

class Cachorro(Animal):
   def emitir_som(self):
       return "Au au!"

class Gato(Animal):
   def emitir_som(self):
       return "Miau!"

# Testando
animais = [Cachorro(), Gato()]

for a in animais:
   print(a.emitir_som())
 

Saída:
Au au!
Miau!

Animal é abstrata e não pode ser instanciada diretamente. Apenas suas subclasses concretas (Cachorro, Gato) implementam o método obrigatório emitir_som().

Vantagens da Herança

• Reutilização de código: evita duplicação.

• Extensibilidade: fácil adicionar novas funcionalidades.

• Organização: código mais limpo e modular.

• Polimorfismo: objetos diferentes podem compartilhar a mesma interface.

Conclusão

A herança é um recurso poderoso da programação orientada a objetos em Python, mas não deve ser usada de forma automática. O grande valor está em escolher quando ela realmente faz sentido: ao estruturar hierarquias de classes, evitar repetição de código e permitir extensibilidade. Porém, em muitos cenários, a composição pode ser uma alternativa mais simples e flexível. O mais importante é entender bem as possibilidades para aplicar a técnica certa no momento certo. Com os exemplos deste artigo, você já tem uma base sólida para explorar herança nos seus próprios projetos e evoluir a qualidade do seu código.

Compartilhe este post:
Voltar para a Home