Encapsulamento (Python)
Em Python, encapsulamento é o conceito de restringir o acesso direto aos dados internos de uma classe, permitindo acessá-los apenas por métodos definidos. Isso é feito principalmente usando variáveis privadas e métodos públicos de acesso/modificação (getters e setters).
1. Encapsulamento com underscore duplo (__
)
Usamos __
para tornar um atributo privado:
class ContaBancaria:
def __init__(self, titular, saldo):
self.__titular = titular
self.__saldo = saldo
def get_saldo(self):
return self.__saldo
def depositar(self, valor):
if valor > 0:
self.__saldo += valor
def sacar(self, valor):
if 0 < valor <= self.__saldo:
self.__saldo -= valor
else:
print("Saldo insuficiente ou valor inválido.")
2. Usando @property
(forma mais "pythônica")
Você pode usar os decoradores @property
e @<atributo>.setter
para um controle mais elegante:
class ContaBancaria:
def __init__(self, titular, saldo):
self.__titular = titular
self.__saldo = saldo
@property
def saldo(self):
return self.__saldo
@saldo.setter
def saldo(self, valor):
if valor >= 0:
self.__saldo = valor
else:
print("Valor inválido para saldo.")
# Exermplo:
conta = ContaBancaria("Ana", 1000)
print(conta.saldo) # Acessa como se fosse atributo
conta.saldo = 1500 # Modifica com validação
print(conta.saldo)
Conclusão
O encapsulamento em Python não é absoluto como em outras linguagens (como Java ou C++), mas é respeitado por convenção. Se você usar __atributo
, o acesso externo será dificultado. Com @property
, você ainda esconde a lógica de acesso/modificação de forma clara e segura.