1
resposta

Bug no Metodo transfere do projeto de introdução a orientação a objetos com python 3

Fiz uma pequena mudança no metodo transfere, observei que o programa realizado nas aulas fazia o deposito mesmo se a conta não tivesse saldo suficiente, então fiz um if para validar o deposito da mesma forma que foi validado o saque. Então a duvida seria qual a melhor maneira de fazer essa validação e deixar o codigo limpo?

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

    def extrato(self):
        print("Saldo de {} do titular {}".format(self.__saldo, self.__titular))

    def deposita(self, valor):
        self.__saldo += valor

    def __pode_sacar(self, valor_a_sacar):
        valor_disponivel_a_sacar = self.__saldo + self.__limite
        return valor_a_sacar <= valor_disponivel_a_sacar

    def saca(self, valor):
        if(self.__pode_sacar(valor)):
            self.__saldo -= valor
        else:
            print("O valor {} passou o limite".format(valor))

    def transfere(self, valor, destino):
        self.saca(valor)
        if(self.__pode_sacar(valor)): ##if incrementado para validaçao do deposito.
          destino.deposita(valor)

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

    @property
    def get_titular(self):
        return self.__titular

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

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

    @staticmethod
    def codigo_banco():
        return "001"

    @staticmethod
    def codigos_bancos():
        return {'BB':'001', 'Caixa':'104', 'Bradesco':'237'}
1 resposta

Boa tarde, acho que a melhor solução seria tu usar o método sacar(), pois ele já testa se tem saldo. Pórem teria que informar o retorno do método. Exemplo:

def saca(self, valor):
        if(self.__pode_sacar(valor)):
            self.__saldo -= valor
            return True
        print("O valor {} passou o limite".format(valor))
        return False

def transfere(self, valor, destino):
        if self.saca(valor):
                destino.deposita(valor)
                return True
        return False