Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problemas no parâmetro

Boa tarde!

Nessa aula, meu código ficou dessa maneira, porém na hora de chamar esse método, estava dando erro

    def transfere(self, conta_saca, conta_deposito,valor):
        conta_saca.saca(valor)
        conta_deposito.deposita(valor)

Alterando a ordem dos parâmetros(colocando o valor na frente), o código funcionou perfeitamente, existe algum sentido nisso?

1 resposta
solução!

Olá Danilo.

Poderia enviar o erro, dessa maneira consigo te ajudar melhor.

Mas acredito que o problema esteja acontecendo por causa da ordem em que você está passando os parâmetro, por exemplo, se o se método estiver escrito dessa maneira:

    def transfere(self, conta_saca, conta_deposito,valor):
        conta_saca.saca(valor)
        conta_deposito.deposita(valor)

Para utiliza-lo você deve seguir a assinatura que você definiu, nesse caso, primeiro passa a conta que vai transferir o valor, depois a conta que vai receber o valor e por ultimo o valor da transferência. Por exemplo:

>>> conta1.transfere(conta2, conta1, 25)  

Se eu não respeitar a ordem que eu defini na assinatura, vou receber um erro.

>>> conta1.transfere(25, conta1, conta2)                   
Traceback (most recent call last):  
    File "<stdin>", line 1, in <module>                                                                                    
        File "D:\Documentos\fórum alura\topico-problemas-no-parametro-115594\conta.py", line 16, in transfere                     
        conta_saca.saca(valor)
 AttributeError: 'int' object has no attribute 'saca'                                                                    >>>    

E o que esse erro está no dizendo é que "o valor inteiro não tem um atributo chamado 'saca' ". Isso mostra que quando passamos o valor no primeiro parâmetro o nosso método utiliza ele como a variável conta_saca.

Então o importante é que devemos seguir a mesma ordem para passar os parâmetros de quando definimos a assinatura do método.

Uma alternativa é que quando chamamos a função deixemos claro o que cada valor representa em relação ao parâmetro.

>>> conta1.transfere(valor=25, conta_saca=conta1, conta_deposito=conta2)     
 >>>      

Veja nesse caso consigo passar o valor primeiro, mas só porque expliquei para o método onde ele deveria guardar cada valor, que são os parâmetros da função conta_saca, conta_deposito, valor.

Espero ter ajudado, qualquer duvida não hesite em perguntar.

Bons Estudos.