3
respostas

Problemas no Exercício Proposto

''' Exercicio:

Agora é sua vez! Crie uma nova classe chamada Pessoa com atributos como nome, 
idade e profissão. Adicione um método especial __str__ 
para imprimir uma representação em string da pessoa. 
Implemente também um método de instância chamado aniversario 
que aumenta a idade da pessoa em um ano. Por fim, adicione uma propriedade 
chamada saudacao que retorna uma mensagem de saudação personalizada 
com base na profissão da pessoa.

''' #Resolução:



class Pessoa:
    
    niver = 1
    count = 0
    pessoas= []
    
    def __init__(self,nome,idade,profissao):
        self.nome = nome
        self.idade = idade
        self.profissao = profissao
        Pessoa.pessoas.append(Pessoa.pessoas)

    def __str__(self):
        return f'O Nome da Pessoa é {self.nome}, Ele tem {self.idade} anos, E sua profissão é {self.profissao}'
    
    def aniversario(self):
        if Pessoa.count != 0:
            self.idade += Pessoa.niver

    def aniversario(self):
        if len(Pessoa.pessoas) is not None:
            self.idade += Pessoa.niver
    
    def aniversario(self):
        #if Pessoa.count != 0:
            self.idade += 1
            
    def saudacao(self):
        return f'Saudações estamos muito felizes ter um profissional como você que é {self.profissao} colaborando conosco.'
    
pessoa1 = Pessoa('Guilherme','33','Músico')
pessoa2 = Pessoa('Matheus','28','Trans')

print(vars(pessoa1))
pessoa1.aniversario()
print(pessoa1.saudacao())

print(vars(pessoa2))
pessoa2.aniversario()
print(pessoa2.saudacao())

''' Ao executar o código completo para criar o pessoa2 o objeto pessoa1 não tem a idade alterada. E a execução cria os objetos e aprensenta os valores de seus atributos assim como a mesagem de saudação reconhecendo os atributo chamada com o fstring

Não estou conseguindo acertar a lógica para que a idade da pessoa aumenta a cada novo objeto que for criado na classe, preciso de ajuda depois de algumas tentativas '''

3 respostas

Olá, Guilherme! Como vai?

Apenas como título de confirmação, você está tentando fazer com que a idade de todas as pessoas aumente sempre que uma nova pessoa é criada, certo? Na verdade, essa lógica não é muito comum, pois na vida real a idade de uma pessoa não está relacionada à criação de outras pessoas.

No entanto, se você realmente quer implementar essa lógica para fins de aprendizado, uma maneira de fazer isso seria aumentar a idade de todas as pessoas existentes no método __init__. Mas, para isso, você precisa armazenar todas as instâncias da classe Pessoa em uma lista de classe (como você já começou a fazer). Aqui está uma versão modificada da sua classe que faz isso:

class Pessoa:
    pessoas = []
    
    def __init__(self, nome, idade, profissao):
        self.nome = nome
        self.idade = idade
        self.profissao = profissao
        for pessoa in Pessoa.pessoas:
            pessoa.idade += 1
        Pessoa.pessoas.append(self)

    def __str__(self):
        return f'O Nome da Pessoa é {self.nome}, Ele tem {self.idade} anos, E sua profissão é {self.profissao}'
    
    def aniversario(self):
        self.idade += 1
            
    def saudacao(self):
        return f'Saudações estamos muito felizes ter um profissional como você que é {self.profissao} colaborando conosco.'

Nesta versão, a idade de todas as pessoas existentes é aumentada em um ano no método __init__ antes de a nova pessoa ser adicionada à lista. Isso significa que a idade de todas as pessoas aumentará em um ano sempre que uma nova pessoa for criada.

Espero ter ajudado e bons estudos!

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

Perfeito, obrigado pela ajuda, mas, como você bem pontual em um cenário real e "normal" o certo seria tratar o aumento de idade das pessoas utilizando o atributo de idade da classe pessoa em uma lógica que fosse fazer a contagem por periodo e a partir disto aumentasse a idade, certo?

Bom dia, Guilherme!

Sim, se você deseja implementar um sistema que trate o aumento de idade das pessoas utilizando o atributo de idade da classe Pessoa, uma abordagem lógica seria fazer a contagem por períodos (por exemplo, anos) e aumentar a idade apropriadamente conforme esses períodos passem.

Contudo, em um ambiente profissional, normalmente esse tipo de contagem é feito de forma automática, utilizando métodos e bibliotecas de terceiros como apoio, como, por exemplo, a biblioteca datetime. Segue um exemplo:

from datetime import date

class Pessoa:
    pessoas = []
    
    def __init__(self, nome, data_nascimento, profissao):
        self.nome = nome
        self.data_nascimento = data_nascimento
        self.idade = self.calcular_idade()
        self.profissao = profissao
        for pessoa in Pessoa.pessoas:
            pessoa.idade += 1
        Pessoa.pessoas.append(self)

    def __str__(self):
        return f'O Nome da Pessoa é {self.nome}, Ele tem {self.idade} anos, E sua profissão é {self.profissao}'
    
    def calcular_idade(self):
        data_atual = date.today()
        return data_atual.year - self.data_nascimento.year - ((data_atual.month, data_atual.day) < (self.data_nascimento.month, self.data_nascimento.day))
    
    def aniversario(self):
        self.idade += 1
            
    def saudacao(self):
        return f'Saudações estamos muito felizes ter um profissional como você que é {self.profissao} colaborando conosco.'

No código acima, estou utilizando a biblioteca datetime para importar o método date que retornará a data atual. Com isso, posso usar essa data juntamente com a propriedade data_nascimento para calcular a idade da pessoa. Segue um código de como você pode testar essa alteração.

from main import Pessoa
from datetime import datetime

data_nascimento = datetime(1980, 7, 6).date()

pessoa1 = Pessoa("Paulo", data_nascimento, "Programador")

# Você pode acessar as propriedades do objeto
print(pessoa1.nome)  
print(pessoa1.idade)  # A idade será calculada com base na data de nascimento e na data atual
print(pessoa1.profissao) 

# Para ver a saudação
print(pessoa1.saudacao())

Dei um tratamento na data_nascimento, que é uma variável nesse caso, para não ter problema no formatado da data utilizado na biblioteca.

Caso tenha problemas para entender esse exemplo estarei à disposição para ajudar.

Abraços,