FC ConcursosFC Concursos

Questão FC331144

Considere o seguinte código em Python: class Orgao: def __init__(self, s): self.s = s def print(self): print(f"Nome: {self.s}") def print2(self): print("Nome:", self.sigla) class T

Linguagens de Programação

FGV · 2024

Considere o seguinte código em Python:

 

class Orgao:
def __init__(self, s):
self.s = s
def print(self):
print(f"Nome: {self.s}")
def print2(self):
print("Nome:", self.sigla)

 

class Tribunal(Orgao):
def __init__(self, sigla):
super().__init__(sigla)
self.sigla = sigla
def print(self):
super().print()

 

trf1 = Tribunal("TRF1")
trf1.print()
trf1.print2()

 

Em relação às chamadas das funções trf1.print e trf1.print2 no código acima, é correto afirmar que:

  1. ambas as funções irão falhar;
  2. ambas as funções serão executadas com sucesso;
  3. as funções não chegarão a ser chamadas, pois há erro de sintaxe;
  4. trf1.print será executada com sucesso, mas trf1.print2 irá falhar;
  5. trf1.print2 será executada com sucesso, mas trf1.print irá falhar.
Mostrar resposta e comentário

Gabarito

B

Comentário do professor

A resposta é correta porque a classe Tribunal herda de Orgao e, no seu construtor, chama super().__init__(sigla) e em seguida atribui self.sigla = sigla. Isso garante que a instância terá tanto self.s (definida pelo construtor da superclasse) quanto self.sigla (definida pelo construtor da subclasse).

Ao chamar trf1.print(), o método sobrescrito em Tribunal executa super().print(), que usa self.s para imprimir o nome; esse atributo existe, então a chamada ocorre sem erro.

Ao chamar trf1.print2(), executa-se o método herdado de Orgao, que acessa self.sigla. Em Python o lookup de atributos verifica primeiro a instância, onde self.sigla já foi definida, portanto a chamada também ocorre com sucesso.

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

Continue aprendendo