No contexto do Python, analise o script a seguir. ... p1 = Person("John", 36) print(p1.nome) print(p1.cidade) Assinale a correta definição da classe Pessoa que completa o script.
- A)class Pessoa: def __init__(self, nome, cidade): self.nome = nome self.cidade = cidade
Correta: define o metodo __init__ e atribui nome e cidade aos atributos da instancia usando self.
- B)class Pessoa: new (self, nome, cidade): .nome = nome .cidade = cidade
Errada: usa new de forma incorreta e ainda omite a sintaxe valida de atribuicao e de definicao do metodo.
- C)class Pessoa (nome, cidade): self.nome = nome self.cidade = cidade
Errada: classe em Python nao recebe parametros assim na cabeca da definicao, e a estrutura do corpo esta incorreta.
- D)class Pessoa init (nome, cidade)
Errada: falta a sintaxe completa da classe e o metodo correto deve ser __init__, com self.
- E)class Pessoa (p1, p2): def self: self.nome = p1 self.cidade = p2
Errada: a assinatura da classe e do metodo estao trocadas e a ideia de self aparece de forma invalida.
Gabarito: A
Em Python, quando voce cria uma classe para representar um objeto, o ponto de partida costuma ser o metodo especial __init__. Ele funciona como o "construtor" da classe e recebe os parametros usados para inicializar os atributos do objeto. No script, o objeto p1 precisa ter os atributos nome e cidade para que print(p1.nome) e print(p1.cidade) funcionem sem erro. A classe correta, portanto, deve definir __init__(self, nome, cidade) e atribuir esses valores a self.nome e self.cidade. O self representa a instancia atual, ou seja, o proprio objeto que esta sendo criado. Sem ele, o Python nao sabe onde guardar os dados do objeto. A alternativa A faz exatamente isso: define a classe, cria o metodo __init__ com os parametros certos e associa os valores aos atributos da instancia. Por isso, quando p1 = Person("John", 36) for executado, o objeto tera os atributos esperados para as linhas seguintes. As demais alternativas erram por forma ou sintaxe. Em Python, nomes como new, init sem os dois underlines, ou uma classe escrita como se fosse uma funcao, nao servem para inicializacao de objeto. Em prova, a banca gosta muito de testar se voce reconhece a estrutura basica de uma classe com atributos de instancia.