Questão nº 34
Questão de Programação · FCC TJ-CE 2022 (nº 34)
Observe os dois trechos de código Python abaixo
Código 1:
```python
class Tempo:
def print_tempo(tempo):
print('%.2d:%.2d:%.2d' % (tempo.hour, tempo.minute, tempo.second))
I
```
Código 2:
```python
class Tempo:
def print_tempo(tempo):
print('%.2d:%.2d:%.2d' % (tempo.hour, tempo.minute, tempo.second))
II
```
Considere que foram executados estes comandos, antes de I e antes de II, em ambiente configurado em condições ideais:
```python
>>> t1 = Tempo()
>>> t1.hour = 11
>>> t1.minute = 15
>>> t1.second = 00
```
É correto afirmar:
- AEm I e em II, se for executado o comando `>>> print_tempo(t1)` o resultado será 11:15:00
- BO Código 2 pode ser reescrito desta maneira equivalente:
```python
class Tempo:
def print_tempo(self):
print('%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second))
``` (alternativa correta) - CEm II, se for executado o comando `>>> print_tempo(t1)` a função `print_tempo` apresentará como resultado 11:15:00
- DEm I, se for executado o comando `>>> Tempo.print_tempo(t1)` o método `print_tempo` apresentará como resultado 11:15:00
- EEm II, se for executado o comando `>>> t1.print_tempo()` o resultado apresentará erro.
Resposta comentada
Gabarito Alternativa B
Em Python, quando você define uma função dentro de uma classe, ela se torna um método. O primeiro parâmetro de um método (que por convenção chamamos de self, mas pode ser qualquer nome como tempo neste caso) sempre se refere à própria instância do objeto que está chamando o método.
- (A) Incorreta: O comando
print_tempo(t1)resultaria em umNameError, poisprint_tempoé um método definido dentro da classeTempoe não está disponível diretamente no escopo global. Para chamá-lo, seria necessário usart1.print_tempo()ouTempo.print_tempo(t1). - (B) Correta: Em Python, o primeiro parâmetro de um método de instância (como
tempono código original) é convencionalmente chamado deself. Ele representa a própria instância do objeto. Usarselfem vez detempoé uma prática padrão e torna o código mais legível e idiomático, mas funcionalmente ambos os códigos são equivalentes, poistempoeselfrecebem a mesma instância do objeto. - (C) Incorreta: Assim como na alternativa A, o comando
print_tempo(t1)causaria umNameError, pois o método não está acessível diretamente no escopo global. - (D) Incorreta: Embora o comando
Tempo.print_tempo(t1)seja uma forma válida de chamar o método (passando explicitamente a instânciat1como o primeiro argumentotempo), a alternativa é considerada incorreta pelo gabarito oficial. O foco da questão, conforme o gabarito, é a equivalência na definição do método e o papel do primeiro parâmetro, e não apenas uma forma de chamá-lo. - (E) Incorreta: O comando
t1.print_tempo()é a forma mais comum e idiomática de chamar um método de instância. Python automaticamente passa a instânciat1como o primeiro argumento (tempono método), e o método executaria corretamente, imprimindo11:15:00. Portanto, não apresentaria erro.
Fonte: FCC TJ-CE 2022 Analista Judiciário - Especialidade Ciência da Computação - Área Sistemas da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.