3
respostas

[Dúvida] O método str não funciona para a saudação

Antes de implementar a propriedade saudação o print saía como string, depois passou a sair como endereço de memória

class Pessoa:
    def __init__(self, nome='', idade=0 , profissao=''):
        self.nome = nome
        self.idade = idade
        self.profissao = profissao

    def __str__(self):
        return f'{self.nome}, {self.idade} anos, {self.profissao}'
    
    @property
    
    def aniversario(self):
        self.idade += 1
    
    def saudacao(self):
        if self.profissao:
            return f'Olá, sou {self.nome}! Trabalho como {self.profissao}.'
        else:
            return f'Olá, sou {self.nome}!'    

pessoa_1 = Pessoa('Richarlison', 26, 'Perna de pau')
pessoa_2 = Pessoa('Gabigol', 27, 'Trapper')
pessoa_3 = Pessoa('Gabriel Jesus', 26)
pessoa_4 = Pessoa('Neymar', 31, 'Influencer')

print('Infomações Iniciais: ')
print(pessoa_1.saudacao)
print(pessoa_2.saudacao)
print(pessoa_3.saudacao)
print(pessoa_4.aniversario)


3 respostas

Oi Rafael, vc precisa adicionar o decorator de propriedade antes de cada um dos métodos que vc quer usar como propriedade da classe.

    # adicione o decorador tb antes do metodo saudacao
    @property
    def saudacao(self):
        if self.profissao:
            return f'Olá, sou {self.nome}! Trabalho como {self.profissao}.'
        else:
            return f'Olá, sou {self.nome}!' 

coloquei, a saudação funcionou, o aniversário retorna none

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Para o seu método aniversario ter algum valor quando vc chama, vc precisaria colocar algo pra ele retornar, no momento vc está apenas fazendo idade + 1 ali.