9
respostas

Referente ao curso Python 3: introdução a Orientação a objetos, no capítulo Métodos privados e estáticos e atividade Métodos privados

O meu código está dando os seguintes erros e não consegui achar a solução: As demais funções estão funcionando normalmente.

conta2.transfere(10, conta) Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'transfere' conta.pega_saldo() Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'pega_saldo' conta.devolve_titular() Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'devolve_titular' conta.retorna_limite() Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'retorna_limite'

Meu código está abaixo:

class Conta:

def __init__(self, numero, titular, saldo, limite):
    print("Construindo objeto ... {}".format(self))
    self.__numero = numero
    self.__titular = titular
    self.__saldo = saldo
    self.__limite = limite

def extrato(self):
    print("Saldo de {} do titular {}".format(self.__saldo, self.__titular))

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

def saca(self, valor):
    self.__saldo -= valor

def transfere(self, valor, destino):
    self.saca(valor)
    destino.deposita(valor)

def pega_saldo(self):
    return self.__saldo

def devolve_titular(self):
    return self.__titular

def retorna_limite(self):
    return self.__limite    
9 respostas

Olá Gabriela!

Ao que tudo indica, o único motivo que consigo enxergar é que talvez o seu código não esteja indentado da maneira correta.

Procure ver se ele está dessa maneira, com todos métodos dentro da classe Conta:

class Conta:
    def __init__(self, numero, titular, saldo, limite):
        print("Construindo objeto ... {}".format(self))
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite

    def extrato(self):
        print("Saldo de {} do titular {}".format(self.__saldo, self.__titular))

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

    def saca(self, valor):
        self.__saldo -= valor

    def transfere(self, valor, destino):
        self.saca(valor)
        destino.deposita(valor)

    def pega_saldo(self):
        return self.__saldo

    def devolve_titular(self):
        return self.__titular

    def retorna_limite(self):
        return self.__limite 

Repare que isso seria um erro de indentação:

class Conta:
def __init__(self, numero, titular, saldo, limite):
    print("Construindo objeto ... {}".format(self))
    self.__numero = numero
    self.__titular = titular
    self.__saldo = saldo
    self.__limite = limite

Oi Douglas

Copiei o teu código e continua dando o mesmo problema. Todas as funções depois de saca está dando este erro. Será que pode ser o software PyCharm com algum defeito?

Gabriela,

Acho difícil que seja algum problema referente ao PyCharm.

Talvez seja algum problema quando você está testando e criando os objetos.

Por exemplo, você está testando no console do PyCharm? Se sim, você está dando o comando from conta import Conta (conta é o nome do arquivo, e Conta é o nome da classe) antes de criar o objeto?

Eu testei os comandos pelo console e todos funcionaram:

PyDev console: starting.
Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32

from teste import Conta

conta = Conta(123, 'douglas', 50, 100)
Construindo objeto ... <teste.Conta object at 0x0000017771F17940>

conta.extrato()
Saldo de 50 do titular douglas

conta.saca(5)
conta.extrato()
Saldo de 45 do titular douglas

conta2 = Conta(456, 'luiza', 50, 100)
Construindo objeto ... <teste.Conta object at 0x0000017771F02290>

conta.transfere(500, conta2)

conta.extrato()
Saldo de -455 do titular douglas

conta2.extrato()
Saldo de 550 do titular luiza

Olá!

Fiz exatamente como vc fez e continua o erro:

from conta import Conta

conta = Conta(123, 'douglas', 50, 100) Construindo objeto...<conta.Conta object at 0x000001BC0790D880>

conta.extrato() O saldo é de 50 do titular douglas

conta.saca(5)

conta.extrato() O saldo é de 45 do titular douglas

conta2 = Conta(456, 'luiza', 50, 100) Construindo objeto...<conta.Conta object at 0x000001BC07540160>

conta.transfere(500, conta2) Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'transfere'

conta.extrato() O saldo é de 45 do titular douglas

conta2.extrato() O saldo é de 50 do titular luiza

O comando transfere continua não funcionando e os demais que não funcionava antes com o uso do @property e @limite.setter funcionou.

@property
def saldo(self):
    return self.__saldo

@property
def titular(self):
    return self.__titular

@property
def limite(self):
    return self.__limite

@limite.setter
def limite(self, limite):
    self.__limite = limite

Gabriela,

Eu realmente não sei o que pode estar acontecendo, até porque o código está perfeito!

Eu encontrei no fórum alunos que tiveram o mesmo problema que o seu. Dê uma olhada pra ver se há algo que lhe ajude: esse e esse.

Eu acho que você pode testar o código em um outro programa, como por exemplo, executá-lo no cmd do windows, ou então no Google Colab. Ou até no VsCode caso você tenha. Se funcionar, é problema na sua IDE do PyCharm que executa o programa.

Outra coisa que você pode fazer é terminar o curso para ver se até o fim do mesmo o código funcione.

Tente também copiar o código do professor e executar ele pra ver se funciona, e caso funcione, procurar as diferenças.

E por último, tente buscar ajuda com alguém da alura através do e-mail.

Não desanime e não fique sem encontrar a solução do seu problema. É importante ir atrás e pense que essa dificuldade servirá como aprendizado!

Caso consiga resolver, poste aqui a solução encontra para ajudar outros alunos!

Sucesso!! :)

Ok, obrigado por enquanto! Se achar a solução eu posto sim!

Abraço!

Douglas Klann

Realmente o problema era no PyCharm e não nos códigos!! Desinstalei e reinstalei PyCharm, tudo funcionando agora. Apesar do problema, na procura da solução e com a sua ajuda, foi uma experiência que fez eu aprender mais!!

Valeu!!

Que ótimo Gabriela!

Fico feliz que tenhas conseguido resolver.

Bons estudos!