Fácil Python

Criando a classe Pessoa

Enunciado

Crie uma classe Pessoa com __init__ que recebe nome e idade, armazenando-os como atributos de instância. Adicione um método apresentar() que retorna uma string no formato "Meu nome é <nome> e tenho <idade> anos.".

Requisitos

  • A classe se chama Pessoa.
  • __init__ recebe self, nome e idade.
  • apresentar() retorna a frase exata no formato pedido.

Código inicial

class Pessoa:
    def __init__(self, nome, idade):
        # complete aqui
        pass

    def apresentar(self):
        # complete aqui
        pass


p = Pessoa("Ana", 30)
print(p.apresentar())

Saída esperada

Meu nome é Ana e tenho 30 anos.
Ver dica

Dentro de __init__, use self.nome = nome e self.idade = idade. No método, acesse com self.nome e self.idade.

Mostrar solução
class Pessoa:
    def __init__(self, nome, idade):
        # atributos de instância: cada objeto tem os seus
        self.nome = nome
        self.idade = idade

    def apresentar(self):
        # self dá acesso aos atributos do próprio objeto
        return f"Meu nome é {self.nome} e tenho {self.idade} anos."


p = Pessoa("Ana", 30)
print(p.apresentar())

Passo a passo

  1. Definimos a classe Pessoa com class Pessoa:; ela é o molde para criar pessoas.
  2. O método __init__ é chamado automaticamente ao fazer Pessoa("Ana", 30).
  3. Dentro dele, self.nome = nome guarda o valor recebido como atributo da instância.
  4. O mesmo vale para self.idade = idade.
  5. O método apresentar recebe self como primeiro parâmetro, obrigatório em métodos de instância.
  6. Usamos uma f-string para montar a frase, acessando self.nome e self.idade.
  7. Criamos o objeto p e chamamos p.apresentar(), que devolve a string.
  8. print exibe o resultado no terminal.

Por que funciona

Cada vez que instanciamos Pessoa, o Python cria um objeto novo e roda __init__ com self apontando para esse objeto. Assim, self.nome e self.idade ficam guardados naquele objeto específico. Quando chamamos p.apresentar(), o self dentro do método é o mesmo objeto p, então os atributos certos são lidos.

Erros comuns

  • Esquecer self na definição do método: def apresentar(): gera TypeError: apresentar() takes 0 positional arguments but 1 was given ao chamar p.apresentar().
  • Não usar self ao acessar atributos: escrever return nome dentro de apresentar causa NameError: name 'nome' is not defined.
  • Trocar o formato da frase (faltando ponto final, por exemplo) faz o teste falhar; copie exatamente o texto pedido.

Outra forma de resolver

É possível usar dataclasses para gerar __init__ automaticamente:

from dataclasses import dataclass

@dataclass
class Pessoa:
    nome: str
    idade: int

    def apresentar(self):
        return f"Meu nome é {self.nome} e tenho {self.idade} anos."

Vale quando a classe é só um contêiner de dados; aqui, escrever o __init__ na mão ajuda a entender o conceito.

Saída esperada

Meu nome é Ana e tenho 30 anos.