Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro no verificador disponivel

O código quebra quando transformo o método em privado

class Conta:

    def __init__(self, numero, titular, saldo, limite):
        print("Construindo  objeto...{}".format(self))
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__disponivel = self.__saldo + self.__limite

    def extrato(self):
        print("Titular: {}".format(self.__titular))
        print("Saldo na conta:R${}".format(self.__saldo))

    def deposito(self, valor):
        self.__saldo += valor
        print("Conta creditada no valor de R${}".format(valor))

    def saque(self, valor):
        if (self.__disponivel(valor)):
            self.__saldo -= valor
            print("Conta debitada no valor de R${}".format(valor))
        else:
            print("Valor soliticado ultrapassa o limite da conta")

    def transferir(self, destino, valor):
        self.saque(valor)
        if (self.__disponivel(valor)):
            destino.deposito(valor)

    def __disponivel(self, valor_saque):
        disponivel = self.__saldo + self.__limite
        return valor_saque <= disponivel

    @property
    def saldo(self):
        return self.__saldo

    @property
    def titular(self):
        return self.__titular.title()

    @property
    def limite(self):
        return self.__limite

    @property
    def numero(self):
        return self.__numero

    @limite.setter
    def limite(self, limite):
        self.__limite = limite

    @saldo.setter
    def saldo(self, saldo):
C:\Users\user\OneDrive\Programação\Python 3 OO>python3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from conta import *
>>> conta2 = Conta(125, "Steppat", 100, 1000.5)
Construindo  objeto...<conta.Conta object at 0x04CB2530>
>>> conta = Conta(123, "Carlos", 50.5, 1000.5)
Construindo  objeto...<conta.Conta object at 0x04CD6170>
>>> conta.transferir(conta2, 3000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\user\OneDrive\Programação\Python 3 OO\conta.py", line 26, in transferir
    self.saque(valor)
  File "C:\Users\user\OneDrive\Programação\Python 3 OO\conta.py", line 20, in saque
    if (self.__disponivel(valor)):
TypeError: 'float' object is not callable

porem ao tirar do privado volta a funcionar

de __disponivel para disponivel

2 respostas
solução!

Fechei o prompt e voltei uma pasta e depois retornei e deu certo. Não sei muito bem o que estava acontecendo de errado

Provavelmente o problema é que a propriedade disponivel está com o mesmo nome do método disponivel.

Experimente a mudança que fiz:

class Conta:

    def __init__(self, numero, titular, saldo, limite):
        print("Construindo  objeto...{}".format(self))
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__saldoDisponivel = self.__saldo + self.__limite

    def extrato(self):
        print("Titular: {}".format(self.__titular))
        print("Saldo na conta:R${}".format(self.__saldo))

    def deposito(self, valor):
        self.__saldo += valor
        print("Conta creditada no valor de R${}".format(valor))

    def saque(self, valor):
        if (self.__disponivel(valor)):
            self.__saldo -= valor
            print("Conta debitada no valor de R${}".format(valor))
        else:
            print("Valor soliticado ultrapassa o limite da conta")

    def transferir(self, destino, valor):
        self.saque(valor)
        if (self.__disponivel(valor)):
            destino.deposito(valor)

    def __disponivel(self, valor_saque):
        __saldoDisponivel = self.__saldo + self.__limite
        return valor_saque <= __saldoDisponivel

    @property
    def saldo(self):
        return self.__saldo

    @property
    def titular(self):
        return self.__titular.title()

    @property
    def limite(self):
        return self.__limite

    @property
    def numero(self):
        return self.__numero

    @limite.setter
    def limite(self, limite):
        self.__limite = limite

    @saldo.setter
    def saldo(self, saldo):
        self.__saldo = saldo