1
resposta

[Projeto] Resolução - Mão na massa

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

    def __str__(self):
        return f'{self.nome}, {self.idade} anos, {self.profissao}.'
    
    def aniversario(self):
        self.idade += 1

    @property
    def saudacao(self):
        if self.profissao:
            return f'Olá, meu nome é {self.nome}! Trabalho como {self.profissao}.'
        else:
            return f'Olá, meu nome é {self.nome}!'
        
pessoa1 = Pessoa('Valéria', 30, 'Engenheiro')
pessoa2 = Pessoa('Milena', 25)
pessoa3 = Pessoa('Thaís', 28,'Desenvolvedora')

print('Informações iniciais: ')
print(pessoa1)
print(pessoa2)
print(pessoa3)

pessoa3.aniversario()

print('Após o aniversário: ')
print(pessoa1)
print(pessoa2)
print(pessoa3)

print(pessoa1.saudacao)
print(pessoa2.saudacao)
print(pessoa3.saudacao)
1 resposta

Olá, Thaís. Como vai?

Parabéns pela resolução da atividade! O seu código ficou excelente, muito bem estruturado e demonstra que você assimilou com perfeição os conceitos de Programação Orientada a Objetos (POO) em Python.

Você aplicou ótimas práticas no seu script, merecendo destaque:

  • Argumentos opcionais no construtor: Definir idade = 0 e profissão = '' como padrões no __init__ torna a criação de objetos mais flexível, como vimos no caso da pessoa2, onde a profissão não precisou ser informada.
  • O método especial __str__: Utilizá-lo para mudar a representação textual do objeto é uma excelente prática em Python. Isso deixa o comando print(objeto) limpo e legível.
  • O decorador @property: O uso em saudacao foi cirúrgico. Ele permite acessar o método como se fosse um atributo dinâmico (pessoa1.saudacao), sem a necessidade de usar os parênteses (). Além disso, a estrutura condicional dentro dele tratou muito bem o cenário em que a profissão não existe.

Para enriquecer ainda mais o seu aprendizado e trazer algumas boas práticas do ecossistema Python, deixo duas sugestões rápidas que podem deixar seu código ainda mais profissional:

1. Evite acentos nos nomes de variáveis e parâmetros

Embora o Python 3 aceite perfeitamente caracteres do padrão Unicode (como acentos), a convenção internacional da comunidade recomenda utilizar apenas caracteres alfanuméricos simples para nomes de argumentos e variáveis. No seu construtor, você usou profissão = '' com acento no parâmetro, mas definiu o atributo interno como self.profissao = profissão. O ideal para manter o padrão é remover o acento também do argumento:

# Boa prática: manter parâmetros e atributos sem acentuação
def __init__(self, nome, idade = 0, profissao = ''): 
    self.nome = nome
    self.idade = idade
    self.profissao = profissao

2. Uso do f-string com propriedades modificadas

No método aniversario(self), você incrementa a idade corretamente com self.idade += 1. Uma modificação sutil e bem bacana para testar o comportamento do @property é criar propriedades calculadas (como se a pessoa é maior de idade ou não). Veja esse exemplo de complemento:

    @property
    def eh_maior_de_idade(self):
        return self.idade >= 18

O seu código cumpre perfeitamente o propósito do desafio e mostra que você está no caminho certo para dominar os recursos avançados de classes no Python.

Continue praticando e compartilhando sua evolução no fórum!

Espero que possa ter lhe ajudado!