class Pessoa:
"""
Representa uma pessoa com nome, idade e profissão.
Esta classe implementa validações para garantir que a idade permaneça
dentro de um limite realista (1 a 150 anos) e fornece feedback
ao usuário caso esses limites sejam excedidos.
"""
# Constantes da classe para fácil manutenção dos limites de idade
IDADE_MINIMA = 1
IDADE_MAXIMA = 150
def __init__(self, nome: str = '', idade: int = 1, profissao: str = ''):
"""
Inicializa uma nova instância da classe Pessoa.
"""
self.nome = nome.capitalize()
self.profissao = profissao.capitalize()
# A atribuição inicial já aciona o método setter para validar a idade
self.idade = idade
@property
def idade(self) -> int:
"""
Getter (obtem o valor): Retorna a idade da pessoa.
O valor real é armazenado no atributo "privado" _idade.
"""
return self._idade
@idade.setter
def idade(self, valor: int):
"""
Setter (define o valor): Valida e define a idade da pessoa.
Esta é a lógica central que protege o atributo idade.
"""
try:
idade_num = int(valor)
except (ValueError, TypeError):
# Se o valor não for um número (ex: "abc"), assume a idade mínima
idade_num = self.IDADE_MINIMA
# Validação do limite máximo com mensagem de erro customizada
if idade_num > self.IDADE_MAXIMA:
print(f"--- ERRO ---")
print(f"A idade informada ({idade_num}) é superior ao limite de {self.IDADE_MAXIMA} anos.")
print("Este valor ultrapassa os registros de longevidade humana conhecidos.")
print(f"A idade será definida para o valor máximo permitido: {self.IDADE_MAXIMA} anos.")
print("-" * 12)
self._idade = self.IDADE_MAXIMA
# Validação do limite mínimo
elif idade_num < self.IDADE_MINIMA:
self._idade = self.IDADE_MINIMA
# Se a idade for válida
else:
self._idade = idade_num
def __str__(self) -> str:
"""
Retorna a representação em string do objeto, legível.
"""
# Lógica para usar "ano" ou "anos" corretamente
unidade_tempo = "ano" if self.idade == 1 else "anos"
return f'{self.nome}, {self.idade} {unidade_tempo} - {self.profissao}'
@property
def saudacao_formal(self) -> str:
"""
Retorna uma propriedade computada com uma saudação formal.
"""
return f'{self.profissao} {self.nome}'
def aumentar_idade(self, quantidade: int = 1):
"""
Aumenta a idade da pessoa pela quantidade especificada.
A validação do setter é acionada automaticamente.
"""
if isinstance(quantidade, int) and quantidade > 0:
self.idade += quantidade
else:
print("A quantidade para aumentar a idade deve ser um número inteiro positivo.")
# --- Demonstração de Uso ---
print("1. Criando uma pessoa com idade válida:")
p1 = Pessoa('Mariana', 42, 'Cientista de Dados')
print(f" -> {p1}\n")
print("2. Criando uma pessoa com 1 ano de idade (teste do singular):")
p2 = Pessoa('Enzo', '1', 'Bebê Profissional') # Idade como string para testar conversão
print(f" -> {p2}\n")
print("3. Tentando criar uma pessoa com idade superior ao limite (180 anos):")
p3 = Pessoa('Duncan MacLeod', 180, 'Imortal')
print(f" -> Objeto resultante: {p3}\n")
print("4. Aumentando a idade de uma pessoa para ultrapassar o limite:")
p4 = Pessoa('Júlia', 148, 'Supercentenária')
print(f" Idade inicial: {p4.idade}")
p4.aumentar_idade(5) # 148 + 5 = 153, o que vai disparar o erro
print(f" Idade final: {p4.idade}\n")
print("5. Usando a property 'saudacao_formal':")
print(f" -> {p1.saudacao_formal}")