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.




