Python: Encapsulamento e Herança

Última atualização: 2026-09-22

Encapsulamento esconde os detalhes internos de um objeto, expondo apenas interfaces operacionais seguras. Herança permite que uma classe tenha automaticamente a funcionalidade de outra, evitando repetição. Estes dois conceitos são a espinha dorsal da programação orientada a objetos.


Funções internas relacionadas:super()

1. Encapsulamento e Atributos Privados

Encapsulamento significa que os dados internos de um objeto não devem ser acessados diretamente de fora — devem ser manipulados através de métodos.

(1) Sublinhado Simples _ — Convenção para Atributos "Protegidos"

▶ Exemplo: Sublinhado Simples e Duplo

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully

Um sublinhado simples é apenas uma convenção, não imposta — Python não impede você de acessá-lo. É como escrever na documentação "isto é interno, não toque."

(2) Sublinhado Duplo __ — Name Mangling

▶ Exemplo: Classe Conta Bancária

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully

Sublinhados duplos acionam name mangling — __saldo é internamente transformado para _ContaBancaria__saldo. Isso não é "privacidade" verdadeira, apenas torna menos provável a sobrescrita acidental.

💡 Python não tem verdadeira privacidade. Baseia-se no entendimento "somos todos adultos consentindo" — sublinhado simples significa "uso interno," sublinhado duplo previne colisões de nome. Outras linguagens (como Java) têm uma palavra-chave private verdadeira; Python não tem e não planeja adicionar uma.

▶ Exemplo: Classe Temperatura (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Temperatura não pode ser abaixo do zero absoluto!


2. @property: Controle Elegante de Acesso

Escrever set_celsius() / get_celsius() é verboso. @property permite controlar o acesso mantendo a sintaxe de acesso a atributos:

▶ Exemplo: Usando @property

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully
💡 Vantagens do @property: 1) Sem parênteses para acesso: t.celsius em vez de t.get_celsius(). 2) Validação automática na atribuição: t.celsius = value em vez de t.set_celsius(value). 3) Pode converter um atributo regular em um computado sem quebrar código existente.



3. Herança

Herança permite que uma classe filha tenha todos os atributos e métodos de sua classe pai:

▶ Exemplo: Herança Animal

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully

(1) super(): Chamando Métodos do Pai

▶ Exemplo: super() para Chamar o Pai

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully


4. Padrão Mixin

Um Mixin é uma classe especial — não usada independentemente, mas "misturada" para adicionar funcionalidade a outras classes:

▶ Exemplo: Padrão Mixin

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully
💡 Convenção de nomenclatura de Mixin: Nomes de classe terminando em Mixin indicam que são para misturar, não para uso independente. Uma classe pode misturar múltiplos Mixins mais uma classe base principal — muito mais flexível que herança única profunda.



5. Casos de Uso Comuns


Funções internas relacionadas:super()

❓ Perguntas Frequentes

P Quando devo usar herança vs. Mixin?
R Herança é adequada para relacionamentos "é-um" — um cachorro é um animal. Mixins são adequados para "tem a habilidade" — um pato pode nadar. Prefira composição (Mixin) sobre herança, pois hierarquias de herança profundas são difíceis de manter. Uma boa regra: herança não deve exceder 3 níveis.
P Qual a diferença entre @property e um método regular?
R @property faz um método parecer um atributo — sem parênteses para acesso, atribuição aciona o setter. É essencialmente um "interceptador de atributos" — você escreve código como se estivesse manipulando um atributo, mas um método realmente executa.
P Python suporta herança múltipla? Alguma armadilha?
R Sim — class C(A, B). No entanto, herança múltipla tem o "problema do diamante" (qual método do pai usar quando ambos têm o mesmo nome). Python usa MRO (Method Resolution Order), pesquisando da esquerda para a direita. Mixins são um padrão de design que aproveita a herança múltipla, com classes Mixin sendo pequenas e funcionalmente independentes, evitando problemas de diamante.

📖 Resumo



📝 Exercícios

  1. Iniciante (Dificuldade ⭐): Defina uma classe Produto com @property para o atributo preco — deve ser positivo ao definir; retorna o valor original ao obter.

  2. Intermediário (Dificuldade ⭐⭐): Defina uma herança de três níveis: Animal -> Mamifero -> Cachorro / Gato. Animal tem nome e idade; Mamifero adiciona cor_pelo; Cachorro e Gato implementam seus próprios métodos falar().

  3. Avançado (Dificuldade ⭐⭐⭐): Crie um sistema de logging com MixinLogavel (fornece métodos log_info(), log_error()) e uma classe base Aplicacao (tem um atributo nome). Faça WebApp e CLIApp herdarem de Aplicacao e misturarem MixinLogavel para implementar funcionalidade de logging.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%