2
respostas

Dúvida Atributos Privados

Quando definimos um atributo com privado usando .__ isso que dizer que só podemos modificar os atributos de um objeto a partir dos métodos de sua classe?

class Conta:
    def __init__(self,numero,titular,saldo,limite):

        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite

    def depositar(self,valor_deposito):
        self.__saldo += valor_deposito

    def sacar(self,valor_saque):
        if self.__saldo < valor_saque:
            print('Saldo Insuficiente')
        else:
            self.__saldo -= valor_saque

    def extrato(self):
        print(f'A conta de número {self.__numero} é de R$ {self.__saldo}')

Criando os objetos:

from conta import Conta

conta1 = Conta(123,'Henrique',50.0,150.50)
conta1.depositar(50)
conta1.sacar(30)
conta1.extrato()

conta2 = Conta(565,'Joao',30.50,800.00)
conta2.depositar(34.50)
conta2.sacar(10)
conta2.extrato()

2 respostas

Considerações Iniciais

Se eu tento acessar um atributo privado em Java, por exemplo, recebo o seguinte erro:

error: valor has private access in MinhaClasse

Já no Python isso não acontece. É possível acessar livremente qualquer atributo dentro do escopo definido.

Afinal, existe Atributo Privado em Python?

Sim, existe. Contudo, é uma convenção entre os desenvolvedores e não uma restrição do interpretador.

Apesar disso, é uma boa prática usar dois underscores no início do nome da variável para alertar outros programadores de que não é esperado que acessem diretamente essa variável.

"Os atributos que devem ser ocultos do código externo devem ser definidos com dois underscores iniciais, (...), por exemplo, __atributo_privado."

(Fonte: Matthes, Eric. "Python Crash Course: A Hands-On, Project-Based Introduction to Programming". No Starch Press, 2019)

Entendi, nesse caso o acesso é feito via métodos definidos na classe?