Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Setter não funciona

Queria uma ajuda para entender o que está acontecendo no meu código.

class Cliente:

    def __init__(self, nome):
        self.__nome = nome

    @property
    def nome(self):
        print("chamando @property nome()")
        return self.__nome.title()

    @nome.setter
    def nome(self, nome):
        print("chamando setter nome()")
        self.__nome = nome

O que acontece no console quando tento trabalhar com este código é o seguinte.

from cliente import Cliente
cliente = Cliente('marcos')
cliente.nome
chamando @property nome()
'Marcos'
cliente.nome = 'vinicius'
cliente.nome
'vinicius'

Quando o método property é utilizado ele funciona corretamente, inclusive mostrando primeiro o print que existe dentro da função.

Porém quando é atribuído um novo nome ao objeto cliente o método setter parece não ser ativado, tanto que o print nem aparece no console. Pelo que percebi está sendo criado um novo atributo "nome", pois depois de ser atribuído o novo nome ao objeto, o método property (get) não retorna mais o print.

O que está errado?

3 respostas

Oi Igor! Como vai?

Tenta escrever o código no arquivo e rodar pelo "Run", vê o que acontece e me fala.

class Cliente:

    def __init__(self, nome):
        self.__nome = nome

    @property
    def nome(self):
        print("chamando @property nome()")
        return self.__nome.title()

    @nome.setter
    def nome(self, nome):
        print("chamando setter nome()")
        self.__nome = nome

if __name__ == '__main__':

    cliente = Cliente("marcos")
    print(cliente.nome)
    cliente.nome = "vinicius"
    print(cliente.nome)

Olá Marina, tudo bem e contigo?

Eu fiz aqui, ficou assim:

/Users/Igor/PycharmProjects/pytestes/venv/bin/python /Users/Igor/PycharmProjects/pytestes/cliente.py
chamando @property nome()
Marcos
vinicius

Acho que o problema é no meu pycharm, pois fiz o teste pelo terminal e deu certo :(

solução

Sim, também acho que é alguma configuração do seu PyCharm.

Aqui no meu Pycharm rodou direitinho. Verifique se está com a versão mais atualizada do Pycharm, qualquer coisa tente instalar novamente com as configurações que vem por padrão.

Qualquer coisa você pode usar outras IDEs também, como o Sublime Text, o Atom ou o Visual Code Studio. Alguns dele você precisará instalar uma extensão de Python, ai se precisar de mais orientações específicas me avise.