FC ConcursosFC Concursos

Questão FC331124

Considere o código a seguir que é usado para capturar a sintaxe de diversos tipos de frase a ser usado. class Frase: def _init_ (self,texto): self.texto = texto def verbo(self) sel

Linguagens de Programação

FGV · 2024

Considere o código a seguir que é usado para capturar a sintaxe de diversos tipos de frase a ser usado.

 

class Frase:

def _init_ (self,texto):

self.texto = texto

def verbo(self)

self.palavras = self.texto.split()

return ("Verbo")

class Afirmativa(Frase):

def verbo(self):

palavras = self.texto.split()

return palavras[1]

class Pergunta(Frase):

def verbo(self):

return self.palavras[2]

def imp(frase):

print (frase.verbo())

imp(Afirmativa("Eu vou a praia"))

imp(Pergunta("Onde voce vai ?"))

 

A saída correta desse código é

  1. vou a praia

    Vai

  2. vou

    Vai

  3. vou vai
  4. Eu

    Você

  5. Retorna erro
Mostrar resposta e comentário

Gabarito

Errado

Comentário do professor

O código gera erro em tempo de execução. Ao chamar imp(Pergunta("Onde voce vai ?")), a função invoca Pergunta.verbo(), que retorna self.palavras[2]. Nesse ponto, o atributo self.palavras não foi definido para a instância, portanto o Python lança um AttributeError.

Por que isso acontece? A classe Pergunta sobrescreve o método verbo sem criar ou atribuir self.palavras. A classe Afirmativa apenas cria uma variável local palavras (não atribuída a self), e o método da classe base que poderia definir self.palavras não é chamado antes do acesso.

Correção simples: dentro de Pergunta.verbo() faça palavras = self.texto.split() e retorne palavras[2], ou atribua self.palavras = self.texto.split() antes de acessar. Assim o código passa a imprimir corretamente as palavras esperadas.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo