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

[Dúvida] Mão na massa: property e metodo de classe

Por que a saudação não está funcionando?

import os

class Pessoa:
    lista_de_pessoas = []

    def __init__(self, nome, profissao, idade=0):
        self._nome = nome.title()
        self._profissao = profissao.title()
        self._idade = idade
        Pessoa.lista_de_pessoas.append(self)

    def __str__(self):
        return f'{self._nome} | {self._profissao} | {self._idade}'
    
    @classmethod
    def listar_pessoas(cls):
        os.system('cls')
        print(f'{'Nome'.ljust(25)} | {'Profissão'.ljust(25)} | {'Idade'}')

        for pessoa in cls.lista_de_pessoas:
            print(f'{pessoa._nome.ljust(25)} | {pessoa._profissao.ljust(25)} | {pessoa._idade}')
    
    @property
    def saudacao(self):
        if self._profissao:
            return f'Olá, meu nome é {self._nome} e sou {self._profissao}'
        else:
            return f'Olá, meu nome {self._nome}'
    
    def aniversario(self):
        self._idade += 1


pessoa_felipe = Pessoa('felipe', 'psicólogo', 28)
pessoa_felipe.aniversario()
pessoa_felipe.saudacao

Pessoa.listar_pessoas()
2 respostas
solução!

Olá, Felipe, tudo bem?

A não exibição da saudação está ocorrendo devido seu código está apenas acessando a propriedade saudacao, mas não está imprimindo o seu valor. Em Python, propriedades precisam ser acessadas de forma que seu valor seja utilizado, como em uma impressão ou atribuição.

Para resolver isso, basta fazer o uso da função print() para imprimir o retorno da propriedade saudacao, como apresentado abaixo:

print(pessoa_felipe.saudacao)

Um outro ponto muito importante, devido ao uso do método os.system('cls') dentro do método listar_pessoas, o console será apagado sempre que o método listar_pessoas for chamado. Devido a este comportamento, a mensagem de saudação será apagada do console caso seja chamada após o método listar_pessoas. Para efeito de teste, recomendo que execute o método saudação após a chamada do método listar_pessoas, como apresentado abaixo:

pessoa_felipe = Pessoa('felipe', 'psicólogo', 28)
pessoa_felipe.aniversario()
Pessoa.listar_pessoas()
print(pessoa_felipe.saudacao)

Resultado

Imagem contendo o resultado da execução do código acima no terminal

Após realizar as modificações acima, salve o arquivo e execute-o novamente.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Poxa, eu tava tão desatento que esqueci de um simples "print". E entendi sua observação sobre o 'cls'. Obrigado mais um vez, Rafael.