Questão nº 46

Questão de Administração de Banco de Dados · FGV MPAL 2018 (nº 46)

FGV2018Analista do Ministério Público - Administrador de Banco de DadosAdministração de Banco de Dados
Gabarito: Cver comentário ↓

Analise o código Python 2.7 a seguir.

class End_simples(object):
  def __init__(self, rua, num, bai):
    self.rua = rua
    self.num = num
    self.bai = bai
  def Endereco(self):
    return self.rua + ", " + self.num \
           + " " + self.bai
class End_com(End_simples):
  def __init__(self, rua, num, bai, com):
    End_simples.__init__(self,rua, num, bai)
    self.com = com
  def Endereco(self):
    ...
a = End_simples("Av Brasil", "243", \
                "Floresta")
b = End_com("Av Miracema", "12", \
            "Centro", "apto 3")
print(a.Endereco())
print(b.Endereco())

Sabe-se que a execução desse código produziu as duas linhas a seguir.

Av Brasil, 243 Floresta
Av Miracema, 12 Centro, apto 3

Assinale a opção que apresenta a correta definição para o método Endereco na classe End_com.

Resposta comentada

Gabarito Alternativa C

Herança é quando uma classe (filha) adquire características e comportamentos de outra classe (pai). Polimorfismo permite que métodos com o mesmo nome se comportem de maneiras diferentes em classes distintas, e para acessar a versão do método da classe pai, usamos a função super().

  • (A) Incorreta: Chamar self.Endereco() dentro do próprio método Endereco da classe End_com causaria uma recursão infinita, pois ele tentaria chamar a si mesmo repetidamente. Esta é a armadilha mais comum para iniciantes.
  • (B) Incorreta: End_simples.Endereco() chama o método diretamente da classe End_simples. Para que funcionasse corretamente, você precisaria passar a instância self explicitamente como primeiro argumento (End_simples.Endereco(self)), mas mesmo assim, não é a forma mais robusta e recomendada em Python para lidar com herança e MRO (Method Resolution Order).
  • (C) Correta: super(End_com, self).Endereco() é a forma padrão e recomendada em Python 2.7 para chamar um método da classe pai (ou da próxima classe na ordem de resolução de métodos) a partir de uma classe filha. Ele retorna um objeto proxy que permite acessar os métodos da classe pai, aplicando o polimorfismo corretamente e garantindo que o método Endereco da classe End_simples seja executado com a instância atual (self).
  • (D) Incorreta: parent não é uma função ou palavra-chave válida em Python para acessar a classe pai. Isso resultaria em um erro de NameError.
  • (E) Incorreta: Return está com a primeira letra maiúscula, o que é um erro de sintaxe em Python (deve ser return). Além disso, self.parent não é um atributo padrão para acessar a classe pai; isso resultaria em um AttributeError.

Fonte: FGV MPAL 2018 Analista do Ministério Público - Administrador de Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho