Olá Ana, tudo bem?
Peguei seu código pra testar e descobrir o porque do seu "erro".
E ai está a pegadinha, não tem erro! Bem, ao menos não na parte do código.
Então porque não rodou? Essa é fácil, o problema não está no código dessa vez mas sim no compilador. No seu caso você esqueceu de reiniciar o console do python, (ctrl + D se você estiver no terminal, cmd + R no Pycharm se você está em um mac, no windows/linux imagino que seja control + R (você pode clicar no simbolozinho de uma setinha verde saindo de um quadrado e fazendo um retorno tbm se n quiser usar o comando)) como você não tinha reiniciado o console, o python estava pensando que o seu código era assim:
class Conta:
def __init__(self, numero, titular, saldo, limite):
...
def extrato(self):
...
def deposita(self, valor):
...
def saca(self, valor):
...
def transfere(self, valor, destino):
...
def get_numero(self):
...
def get_titular(self):
...
def get_saldo(self):
...
@property
def limite(self):
return self.__limite
Porquê isso acontece? Isso acontece porque, por padrão, o python compila e roda o código que você mandou pra ele na hora que você aperta o "run", depois disso qualquer alteração que você faça no código não vai ser rodada enquanto você não rodar novamente.
Você viu que deu um erro, tentou fazer funcionar ou procurar o erro, mudou o nome e reiniciou o Console antes de rodar com o nome diferente e ao rodar deu tudo certo :)
Inclusive o nome que você coloca ali não faz diferença nenhuma para o python, você poderia colocar def limite (self, batata):
, se depois você colocar self.__limite = batata
o código vai rodar igual. Esses nomes que nós estamos colocando são pra ter mais semântica e outros humanos entenderem o que está acontecendo ali.
Inclusive se você quiser testar novamente, comente a parte do setter
do seu código e coloque pra rodar. Você vai ter esse mesmo erro que teve.
Olhe:
class Conta:
...
@property
def limite(self):
return self.__limite
# @limite.setter
# def limite(self, limite):
# self.__limite = limite
Agora no console:
>>> conta.limite = 2000.0
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: can't set attribute
Isso é bem comum de acontecer, principalmente se estamos cansados ou começando a aprender a programar, inclusive tem um caso de um amigo meu que passou horas procurando um problema no código dele quando o problema era que o compilador que ele estava usando estava com um problema, ele tentou rodar em outro programa e deu tudo certo, por isso quando você pega um compilador novo é sempre bom rodar um "hello world" básico só pra ter certeza de que está tudo certo por ali. E é claro, lembrar de salvar o arquivo e reiniciar o console antes de rodar o código :)