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

Erro: name 'depositallaccounts' is not defined

Meu código está dando o erro apresentado acima quando inicio a função "depositallaccounts", segue abaixo:

class ContaCorrente:

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

    def __str__(self):
        return "[>>Código {} Saldo {}<<".format(self.codigo, self.saldo)

    def depositallaccounts(self, conta):
        self.conta = conta
        for conta in contas:
            conta.deposit(100)


contaLuis = ContaCorrente(1234)
contaLuis.deposit(2000)

contaTaisa = ContaCorrente(4321)
contaTaisa.deposit(1500)

contas = [contaLuis, contaTaisa]
depositallaccounts(100)
print(contas[0], contas[1])
print(contas[0], contas[1])

contas.insert(0, 76)
print(contas[0], contas[1], contas[2])
4 respostas

Pelo que percebi, você está fazendo um "for" pelas contas sem ter informado para esse método quais são essas contas. Tente dessa forma abaixo, passando as contas para o método, assim ele sabe quais são e consegue fazer a iteração em cada uma.

def depositallaccounts(self, contas):
        self.conta = contas
        for conta in contas:
            conta.deposit(100)

e podes chamar assim:

contas = [contaLuis, contaTaisa]
ContaCorrente.depositallaccounts(contas)

Bom dia! Obrigada pela ajuda, mas infelizmente o código ainda assim não funcionou, após as mudanças ocorreram o seguinte erro: Traceback (most recent call last): File "C:\Users\992199901\PycharmProjects\introducaocollections\introducao.py", line 24, in ContaCorrente.depositallaccounts(contas) TypeError: ContaCorrente.depositallaccounts() missing 1 required positional argument: 'contas'

O código ficou assim:

class ContaCorrente:

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

def __str__(self):
    return "[>>Código {} Saldo {}<<".format(self.codigo, self.saldo)

def depositallaccounts(self, contas):
    self.conta = contas
    for conta in contas:
        conta.deposit(100)

contaLuis = ContaCorrente(1234) contaLuis.deposit(2000)

contaTaisa = ContaCorrente(4321) contaTaisa.deposit(1500)

contas = [contaLuis, contaTaisa] ContaCorrente.depositallaccounts(contas)

print(contas[0], contas[1]) print(contas[0], contas[1])

contas.insert(0, 76) print(contas[0], contas[1], contas[2])

solução!

Olá, segue o código completo corrigo, abaixo te explico o que foi alterado e porque:

class ContaCorrente:

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

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

    def __str__(self):
        return "[>>Código {} Saldo {}<<".format(self.codigo, self.saldo)

    @classmethod
    def depositallaccounts(cls, contas):
        for conta in contas:
            conta.deposit(100)


contaLuis = ContaCorrente(1234)
contaLuis.deposit(2000)

contaTaisa = ContaCorrente(4321)
contaTaisa.deposit(1500)


contas = [contaLuis, contaTaisa]
print(contas[0], contas[1])

ContaCorrente.depositallaccounts(contas)

print(contas[0], contas[1])

Foi colocado o decorador "@classmethod" no método depositallaccounts() pois ele pode ser chamado sem precisar instanciar uma nova classe, ele é um método da classe em si e não do objeto criado por ele. Assim você pode chamar a classe e o método direto: ContaCorrente.depositallaccounts(contas), ele não está "vinculado" a conta do Luis ou da Taisa.

Assim você pode simplesmente criar as contas, depois chamar o método passando as contas, ele vai "depositar" normalmente.

Ahhh, entendi. Muito obriga pela ajuda, Melkizedek! No curso passado de Python havíamos visto sobre essa classificação, mas não possuía ideia que de que ela se encaixaria nesse contexto. Mas de verdade mesmo, obrigada!