Questão nº 35
Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 35)
FCC2022Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Bver comentário ↓
Considere o programa em Python abaixo.
class Juiz:
def __init__(self, nome, trt, processo, ativo):
self.nome = nome
self.trt = trt
self.processo = processo
self.__ativo = ativo
**I**
if __name__ == "__main__":
pessoa1 = Juiz("Juiz1", "TRT17", "NP123456", True)
pessoa1.ocupado()
Para que, ao executar o programa acima em condições ideais, a saída seja:
ativo = False
O juiz Juiz1 não está ativo no processo NP123456
A lacuna I deve ser preenchida corretamente por:
- A```python
def __ocupado(self):
print("ativo = False")
self.__ativo = False
print("O juiz " + self.nome + " não está ativo no processo "+ self.processo)
``` - B```python
def ocupado(self):
self.__ativo = False
print("ativo = ", self.__ativo)
print("O juiz " + self.nome + " não está ativo no processo "+ self.processo)
``` (alternativa correta) - C```python
def ocupado(pessoa1)
pessoa1.__ativo = !pessoa1.__ativo
print("ativo = ", pessoa1.__ativo)
print("O juiz ", pessoa1.nome, " não está ativo no processo ", pessoa1.processo)
``` - D```python
def __ocupado__(pessoa1):
self.__ativo = not self.__ativo
print("ativo = " + self.__ativo)
print("O juiz " + self.nome + " não está ativo no processo " + self.processo)
``` - E```python
def __ocupado__(self)
self.__ativo = not self.__ativo
print("ativo = ", self.__ativo)
print("O juiz ", self.nome, " não está ativo no processo ", self.processo)
```
Resposta comentada
Gabarito Alternativa B
Em Python, um método é uma função definida dentro de uma classe que opera sobre os atributos (dados) de um objeto dessa classe. O primeiro parâmetro de um método, por convenção chamado self, refere-se à própria instância do objeto, permitindo acessar e modificar seus atributos.
- (A) Incorreta: O nome do método é
__ocupado(com dois underscores iniciais), o que o tornaria "privado" (name-mangled) e inacessível diretamente porpessoa1.ocupado(). A chamada no código principal espera um método chamadoocupado. Além disso,print("ativo = False")imprime uma string literal, não o valor da variávelself.__ativo. - (B) Correta: O nome do método
ocupadocorresponde à chamadapessoa1.ocupado(). O parâmetroselfé usado corretamente para acessar os atributos da instância.self.__ativo = Falseatualiza o estado do atributo.print("ativo = ", self.__ativo)imprime a string "ativo = " seguida do valor atual deself.__ativo(que éFalse), com um espaço padrão entre eles, resultando em "ativo = False". A segunda linha de impressão também usa corretamente a concatenação de strings com os atributosself.nomeeself.processopara gerar a saída esperada. - (C) Incorreta: A sintaxe
!pessoa1.__ativopara negação booleana está incorreta em Python (o correto énot). Isso causaria umSyntaxError. Além disso, o objetivo é definir__ativocomoFalse, não alternar seu valor. O uso depessoa1como parâmetro em vez deselfé uma má prática e pode levar a confusão, embora Python permita. - (D) Incorreta: O nome do método
__ocupado__(com dois underscores em ambos os lados) é reservado para métodos especiais (dunder methods) e não seria chamado porpessoa1.ocupado(). O parâmetropessoa1em vez deselfé inadequado. Mais gravemente,selfnão estaria definido dentro do método, causando umNameErrorao tentar acessarself.__ativo. A concatenação+ self.__ativocausaria umTypeErrorpois não se pode concatenar diretamente uma string com um booleano. - (E) Incorreta: O nome do método
__ocupado__(com dois underscores em ambos os lados) é reservado para métodos especiais e não seria chamado porpessoa1.ocupado(). Falta um dois-pontos:após(self), o que resultaria em umSyntaxError. Além disso,self.__ativo = not self.__ativoalternaria o valor de__ativo, mas o objetivo é defini-lo explicitamente comoFalse.
Fonte: FCC TRT17 2022 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.