Questão nº 59

Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 59)

FGV2024Técnico Judiciário - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Bver comentário ↓

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:

Resposta comentada

Gabarito Alternativa B

Em Python, quando uma classe herda de outra (subclasse de uma superclasse), os métodos da superclasse podem acessar atributos definidos na instância da subclasse, desde que esses atributos existam na instância. A resolução de atributos (self.atributo) ocorre no objeto em si, não na classe onde o método foi originalmente definido.

(A) Incorreta: Ambas as funções serão executadas sem falhas.
(B) Correta: Ambas as funções serão executadas com sucesso. Ao criar trf1 = Tribunal("TRF1"), o método Tribunal.__init__ é chamado. Ele primeiro chama super().__init__("TRF1"), que define self.s = "TRF1" na instância trf1. Em seguida, Tribunal.__init__ define self.sigla = "TRF1" na mesma instância. Assim, a instância trf1 possui ambos os atributos s e sigla, ambos com o valor "TRF1".

  • trf1.print(): Chama o print de Tribunal, que por sua vez chama super().print(). Este é o print de Orgao, que acessa self.s. Como self.s existe ("TRF1"), ele imprime "Nome: TRF1".
  • trf1.print2(): Chama o print2 de Orgao (pois Tribunal não o sobrescreve). Este método acessa self.sigla. Como self.sigla existe ("TRF1"), ele imprime "Nome: TRF1".
    (C) Incorreta: Não há erros de sintaxe no código.
    (D) Incorreta: Este é o distrator mais tentador. A armadilha aqui é pensar que Orgao.print2 falharia porque self.sigla foi definido apenas na subclasse Tribunal. No entanto, em Python, os atributos são armazenados na instância (trf1). Se a instância trf1 possui um atributo sigla, qualquer método que a acesse (seja da superclasse ou subclasse) o encontrará. Como Tribunal.__init__ define self.sigla, trf1.sigla existe e trf1.print2() não falha.
    (E) Incorreta: Ambas as funções serão executadas com sucesso.

Fonte: FGV TRF1 2024 Técnico Judiciário - Desenvolvimento de Sistemas (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