How do I access a private attribute in a class?

1

Write a banking program that you have:

Uma classe Banco com os atributos
- private total
- public TaxaReserva
- private reservaExigida

E métodos
- public podeFazerEmprestimo(valor) --> bool
- public MudaTotal(valor)

And a class has attributes     - private balance     - private ID     - private password

E métodos
- public deposito(senha, valor)
- public saque(senha, valor)
- public podeReceberEmprestimo(valor) --> bool
- public saldo --> float

Suction:

        class Banco(object):
    __total =10000
    TaxaReserva = 0.1
    __reservaExigida = __total*TaxaReserva
    def podeFazerEmprestimo(self,valor):
        if self.__saldo >= 1000:
            return True

    def MudaTotal(self,valor):
        Banco.__total += valor
        return Banco.__total





class Conta(Banco):
    def __init__(self,saldo,ID,senha):

        self.__saldo = saldo
        self.__ID = ID
        self.__senha = senha

    def deposito(self,senha, valor):
        Conta.__saldo += valor

    def saque(self,senha, valor):
        if (senha == self.__senha) and (valor <= self.__saldo) :
            self.__saldo -= valor
    def podeReceberEmprestimo(self,valor):
        pass

    def saldo(self):
        return self.__saldo

##    def __call__(self,x):  # torna a instância callable!
##        return x




itau = Conta(1000,123456,"POO")
itau.saque("POO",200)
print(itau.saldo())
#print(callable(itau)) #é instancia! não é callable! exceto se criar  __call__
#print(callable(Conta))# é callable!
#print(callable(itau)) se criar o def __call___, torna-se callable!
print(Banco.total) 

itau = Account (1000,123456, "OOP") itau.saque ("OOP", 200)

How do I access the password attribute? I get the error:

AttributeError: type object 'Conta' has no attribute '_Conta__senha'
    
asked by anonymous 01.04.2018 / 22:49

2 answers

1
class Banco(object):
    __total =10000
    TaxaReserva = 0.1
    __reservaExigida = __total*TaxaReserva
    def podeFazerEmprestimo(self,valor):
        if self.__saldo >= 1000:
            return True

    def MudaTotal(self,valor):
        Banco.__total += valor
        return Banco.__total

    def get_total(self):
        return Banco.__total





class Conta(Banco):
    def __init__(self,saldo,ID,senha):

        self.__saldo = saldo
        self.__ID = ID
        self.__senha = senha

    def deposito(self,senha, valor):
        Conta.__saldo += valor

    def saque(self,senha, valor):
        if (senha == self.__senha) and (valor <= self.__saldo) :
            self.__saldo -= valor
    def podeReceberEmprestimo(self,valor):
        pass

    def saldo(self):
        return self.__saldo

##    def __call__(self,x):  # torna a instância callable!
##        return x


itau = Conta(1000,123456,"POO")
itau.saque("POO",200)
print(itau.saldo())
#print(callable(itau)) #é instancia! não é callable! exceto se criar  __call__
#print(callable(Conta))# é callable!
#print(callable(itau)) se criar o def __call___, torna-se callable!
#print(Banco.total) # da erro
print(Banco._Banco__total) #acessar variaveis privadas em Python através da sintaxe _NomeDaClasse__nomeDaVariavel
print("Total",itau.get_total())
    
03.04.2018 / 14:48
2

Hello,

Change your withdrawal method. Swap Account by self:

def saque(self,senha, valor):
    if (senha == self.__senha) and (valor <= self.__saldo) :
        self.__saldo -= valor
    
02.04.2018 / 00:02