Encapsulamento
O encapsulamento é um dos pilares da Programação Orientada a Objetos (POO) e consiste em proteger os dados internos de um objeto, expondo apenas uma interface controlada para interação. Em Python, isso é feito usando convenções de nomenclatura e modificadores de acesso.
Como encapsular um objeto
- Atributos e Métodos Privados (
__):
Prefixar um nome com __ (duplo underscore) torna-o privado, impedindo acesso direto de fora da classe.
class ContaBancaria:
def __init__(self):
self.__saldo = 0 # Atributo privado
Para aceder ou modificar atributos privados, usam-se métodos públicos (getters/setters).
2. Atributos Protegidos (_):
Prefixo _ (single underscore) indica que o atributo é protegido ou protected (convenção, não imposição).
self._senha = "1234" # Atributo protegido (evitar acesso externo)
3. Propriedades (@property):
Permitem criar getters/setters de forma elegante, mantendo a sintaxe de atributo.
@property
def saldo(self):
return self.__saldo
@saldo.setter
def saldo(self, valor):
if valor >= 0:
self.__saldo = valor
Exemplo:
class Pessoa:
def __init__(self, nome, idade):
self.__nome = nome # Privado
self._idade = idade # Protegido
# Getter para nome (acesso controlado)
@property
def nome(self):
return self.__nome
# Setter para idade (validação)
@property
def idade(self):
return self._idade
@idade.setter
def idade(self, nova_idade):
if nova_idade > 0:
self._idade = nova_idade
# Uso
p = Pessoa("João", 30)
print(p.nome) # Saída: "João" (via getter)
p.idade = 35 # Altera idade (via setter)
print(p.idade) # Saída: 35
