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 é
- vou a praia
Vai
- vou
Vai
- vou vai
- Eu
Você
- 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