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

Função deposita_para_todas()

Boa tarde amigos, não estou conseguindo fazer a função "deposita_para_todas()" funcionar, tanto no PyCharm como também no colab.research que o professor está utilizando.

Segue meu código:

class ContaCorrente:

    def __init__(self, codigo):
        self.codigo = codigo
        self.saldo = 0

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

    def __str__(self):
        return "[>> Codigo {} Saldo {} <<]".format(self.codigo, self.saldo)

    def deposita_para_todas(contas):
        for conta in contas:
            conta.deposita(100)


conta_do_gui = ContaCorrente(15)
conta_do_gui.deposita(500)

conta_da_dani = ContaCorrente(4656)
conta_da_dani.deposita(1000)

contas = [conta_do_gui, conta_da_dani]

deposita_para_todas(contas)

for conta in contas:
    print(conta)


É exibida a mensagem com o seguinte erro:

Traceback (most recent call last): File "C:\Users\ediso\PycharmProjects\Collections_part1\ContaCorrente.py", line 28, in deposita_para_todas(contas) NameError: name 'deposita_para_todas' is not defined

O código está igual ao exemplo do professor, mesmo assim não funciona.

6 respostas

Olá,

vc não está passando o objeto, somente chamando o método:

deposita_para_todas(contas)

Deveria ser algo como

conta_da_dani.deposita_para_todas(contas)

[]'s

solução!

Olá,

A solução de luciano descrita acima não irá funciona devido a que o objeto em memoria conta_da_dani está armazenado dentro da propria lista, a solução adequada seria somente instaciar a class ContaCorrente e chamar a função:

ContaCorrente.deposita_para_todas(contas)

Obrigado pelo retorno Luciano! Eu havia tentado anteriormente chamar a execução da função através de um objeto do tipo ContaCorrente, como

conta_da_dani.deposita_para_todas(contas)

e também com o outro objeto

conta_do_gui.deposita_para_todas(contas)

mas mesmo assim não funcionou.

A solução proposta pelo Ivo funcionou, a partir da instância da própria classe, obrigado!

Porém, fiquei sem entender o por que de ter funcionado no console do professor, mesmo sem a declaração de uma instância do objeto para executar a função.

Para fazer sem o uso da instacia de Classe é necessario remover um tab do metodo "deposita_para_todas"

ficando assim:

class ContaCorrente:

    def __init__(self, codigo):
        self.codigo = codigo
        self.saldo = 0

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

    def __str__(self):
        return "[>> Codigo {} Saldo {} <<]".format(self.codigo, self.saldo)

def deposita_para_todas(contas):
    for conta in contas:
        conta.deposita(100)


conta_do_gui = ContaCorrente(15)
conta_do_gui.deposita(500)

conta_da_dani = ContaCorrente(4656)
conta_da_dani.deposita(1000)

contas = [conta_do_gui, conta_da_dani]

deposita_para_todas(contas)

for conta in contas:
    print(conta)

Caso queira mais detalhes ou ainda esteja diferente da do professor eu teria que ver aula em que ele expressa isso e o modulo para ter mais detalhes

Perfeito! Obrigado Ivo!

Complementando a explicação do Ivo, Edison:

A "deposita_para_todas" no snippet que vc disponibilizou no início está sendo declarado como um método da classe ContaCorrente e não como uma função. Acredito que sua intenção tenha sido de realmente criar uma função, já que o procedimento envolve percorrer uma lista. Por isto o Ivo sugeriu que vc retirasse o tab, já que assim o Python entende que o bloco de criação da classe acabou onde a identação acabou.