Alexandre Nascimento
Alexandre Nascimento12/05/2025 13:59
Compartilhe

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.

    Compartilhe
    Comentários (1)
    DIO Community
    DIO Community - 14/05/2025 15:47

    Alexandre, seu artigo sobre encapsulamento em Python traz uma explicação clara e prática, especialmente ao mostrar as duas abordagens principais — uso do underscore duplo para atributos privados e a forma “pythônica” com @property e setters. A clareza dos exemplos facilita bastante o entendimento, principalmente para quem está iniciando.

    Você poderia compartilhar sua visão sobre quando é mais adequado usar o encapsulamento com @property em vez do acesso direto aos atributos, considerando a filosofia Python de “we are all consenting adults here”?