2
respostas

Problema para executar o método 'nome'

Segue o meu código:

class Cliente:

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

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

    pass

Estou usando o VS Code, e para testar a clase dentro do VS Code clico ctrl + shift + P e seleciono a opção "Python: Start REPL" e então inicio a declaração:

from cliente import Cliente

cliente = Cliente('leo')

Mas ao digitar "cliente.nome" aparece apenas 'leo'. Na versão anterior do código, sem inserir transformar o método em propriedade também dava um erro ao chegar na mesma parte.

class Cliente:

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


    def get_nome(self):
        return self.nome.title()

    pass

from cliente import Cliente

cliente = Cliente('leo')

liente.get_nome()

Traceback (most recent call last): File "", line 1, in AttributeError: 'Cliente' object has no attribute 'get_nome' Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Leonardo,

Não sei o motivo... mas o meu funciona assim (copiei um trecho do seu código e atrelei no meu código):

import os
#Clear no Terminal
os.system('cls' if os.name == 'nt' else 'clear')

class Cliente:

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

    # Propriedades. - Não precisa usr os parênteses para evocar.
    @property
    def nome(self):
        print("chamando @property nome()")
        return self.__nome.title()
    
    pass

    # Utilizando o decorador `@nome.setter`, é possível criar um
    # método setter que permite modificar o atributo "nome" do
    # cliente.

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

    pass

Tela do Terminal REPL

[]'s,

Fabio I.

Leonardo,

Decidi perguntar ao "Bing Chat" que usa tecnologia "ChatGPTeiro 4.0".

Meu "prompt" foi:

  • "Pergunta! O python exige que uma variável dentro de um "def" "@property" obrigatóriamente seja um "__" variável privada?"

Veja a resposta:

Pergunta para o Bing Chat

Então NÃO é isso ainda...

... eu ainda NÃO sei o motivo.

[]'s,

Fabio I.