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

Classe não recebe o metodo

Porque eu consigo criar contas da classe ContaCorrente no Teste mas não consigo usar um metodo dela? o metodo deposita_para_todas() no caso

class ContaCorrente:

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

    def deposita(self, 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)

class Teste(ContaCorrente):

    conta_do_gui = ContaCorrente(15)
    conta_da_dani = ContaCorrente(47685)

    contas = [conta_do_gui, conta_da_dani, conta_do_gui]

    print(contas[0], contas[1])
    deposita_para_todas(contas)
2 respostas
solução!

Bom dia, Gabriel, tudo certo? Acabei de responder uma pergunta sobre self cntg e bora lá dnv kkkk

Falta só colocar a referência de onde essa função está, como ela foi declarada em uma classe e não no escopo global, então meio que o computador tenta procurar a deposita_para_todas() no seu código e não consegue achar, mas se passar que ela está na classe ContaCorrente que foi o escopo que ela foi declarada, acaba conseguindo acessar essa função, então só alterar ContaCorrente.deposita_para_todas(contas) que vai ser capaz de rodar.

Olha, acho que você usou a classe indevidamente aqui:

class Teste(ContaCorrente):

Isso significa herdar da classe ContaCorrente, o que não parece fazer muito sentido. Ao invez disso, sugiro vc trocar isso por uma função e por último chamar a função, para que seu codigo rode.

def teste():
    conta_do_gui = ContaCorrente(15)
    conta_da_dani = ContaCorrente(47685)
    ...

teste() # importante chamar o teste

Mas sobre a questão de não conseguir usar o método, o deposita_para_todas() faz parte da classe ContaCorrente, então vc precisa chama-lo atravez de um objeto ContaCorrente ou da própria classe ContaCorrente:

ContaCorrente.deposita_para_todas(contas)
conta_do_gui.deposita_para_todas(contas)

Por ultimo, como recomendação de Orientação a Objetos de definir bem as responsabilidades, o ideal seria criar uma classe Banco ou Agencia que conteria todas as contas correntes, e o método deposita_para_todas() estaria nesta classe, não nas classes de contas individuais.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software