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

[Bug] [Dúvida] Exercício 3 - ativar_conta

Olá a todos, estou com duvida na parte 3 do exercício eu fiz o atributo da conta (objeto) e não de classe, pela lógica cada conta teria um status diferente ao outro (ativou ou inativo). Como conseguir fazer só pela instancia e não por método de classe como solicitado, fui ler as opiniões dos instrutores e a partir do uso @classmethod ele não está sendo definido na classe de ContaBancaria e me da esse erro >>>>>>>>>>>>>>>>>>>>>>>>>> AttributeError: type object 'ContaBancaria' has no attribute 'ativar_conta'

class ContaBancaria:
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo
        self._ativo = False

    def __str__(self):
        return f"Conta de {self.titular.ljust(9)} - Saldo: R${self.saldo}"
    
conta1 = ContaBancaria("Guilherme", 1000)
conta2 = ContaBancaria("Joana", 5250)

print(conta1)
print(conta2)

@classmethod
def ativar_conta(cls, conta):
    conta._ativo = True
conta3 = ContaBancaria("Carlos", 900)
print(f'Antes de ativar: Conta ativa? {conta3._ativo}')
ContaBancaria.ativar_conta(conta3)
print(f'Depois de ativar: Conta ativa? {conta3._ativo}')
2 respostas

Ola Boa tarde, eu tambem estou com o mesmo bug.

solução!

Boa tarde Guilherme,

É importante lembrar que python é baseado na identação de código. Portanto para declarar um método dentro de uma classe, ele deve estar identado dentro dessa classe. Portanto o seu código deveria estar:

class ContaBancaria:
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo
        self._ativo = False

    def __str__(self):
        return f"Conta de {self.titular.ljust(9)} - Saldo: R${self.saldo}"

    @classmethod
    def ativar_conta(cls, conta):
        conta._ativo = True

conta1 = ContaBancaria("Guilherme", 1000)
conta2 = ContaBancaria("Joana", 5250)

print(conta1)
print(conta2)

conta3 = ContaBancaria("Carlos", 900)
print(f'Antes de ativar: Conta ativa? {conta3._ativo}')
ContaBancaria.ativar_conta(conta3)
print(f'Depois de ativar: Conta ativa? {conta3._ativo}')

Tudo que for pertencente a classe ContaBancaria deve estar identado (para dentro) abaixo da declaração da classe. Uma vez que você colocou comandos fora dessa identação, o que vier depois não vai ser considerado da classe mais.

Abraço