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:
- ambas as funções irão falhar;
- ambas as funções serão executadas com sucesso;
- as funções não chegarão a ser chamadas, pois há erro de sintaxe;
- trf1.print será executada com sucesso, mas trf1.print2 irá falhar;
- 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