8.8 Método Transfere

E a funcionalidade que transfere dinheiro entre duas contas? Podemos ficar tentados a criar um método que recebe dois parâmetros: conta1 e conta2 do tipo Conta . Cuidado: já sabemos que os métodos de nossa classe Conta sempre recebem a referência, o self - portanto o método recebe apenas um parâmetro do tipo Conta , a conta destino (além do valor):

class Conta:

código omitido

def transfere(self, destino, valor): self.saldo -= valor destino.saldo += valor

Para deixar o código mais robusto, poderíamos verificar se a conta possui a quantidade a ser transferida disponível. Para ficar ainda mais interessante, você pode chamar os métodosdeposita e saca já existentes para fazer essa tarefa:‌

class Conta:

código omitido

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

Quando passamos uma Conta como argumento, o que será que acontece na memória? Será que o objeto é clonado?

No Python, a passagem de parâmetro funciona como uma simples atribuição como no uso do ”=“. Então, esse parâmetro vai copiar o valor da variável do tipo Conta que for passado como argumento para a variável destino . E qual é o valor de uma variável dessas? Seu valor é um endereço, uma referência, nunca um objeto. Por isso não há cópia de objetos aqui.

Esse último código poderia ser escrito com uma sintaxe muito sucinta. Como?

TRANSFERE PARA

Perceba que o nome deste método poderia ser transfere_para() ao invés de só transfere() . A chamada do método fica muito mais natural, é possível ler a frase em português que ela tem um sentido:

conta1.transfere_para(conta2, 50.0):

A leitura deste código seria “conta1 transfere para conta2 50 reais”.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️