Relógio

Relógio

Fácil

Instruções

Implemente um relógio que lida com horários sem datas.

Você deve conseguir somar e subtrair minutos a ele.

Dois relógios que representam o mesmo horário devem ser iguais entre si.

Como este exercício é implementado para a trilha Python

Os testes deste exercício esperam que o seu relógio seja implementado em uma class Clock. Se você ainda não conhece classes em Python, classes e classes (da documentação do Python) são bons lugares para começar.

Representando a sua classe

Ao trabalhar com objetos e depurar esse código, é importante ter uma boa representação desse objeto. Por exemplo, se você criar um novo objeto datetime.datetime no ambiente REPL do Python, poderá ver a representação em string dele:

>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)

A sua class Clock deve criar um object customizado que lida com horários sem datas. Um aspecto importante dessa class será como ela é representada como uma string. Outras pessoas que usam ou chamam objects Clock criados a partir da class Clock vão consultar essa representação em string para depurar e fazer outras atividades. No entanto, a representação padrão de uma class customizada não ajuda muito:

>>> Clock(12, 34)
<Clock object st 0x102807b20 >

Para criar uma representação mais útil, você pode definir um método especial __repr__ na class.

O ideal é que esse método __repr__ retorne código Python válido que possa ser usado para recriar o objeto quando passado para eval(), como descrito na especificação de um método __repr__. Retornar código Python válido permite que outra pessoa desenvolvedora copie e cole a str diretamente no código ou no REPL. Uma Clock que representa 11:30 da manhã ficaria assim:

 `Clock(11, 30)`

Definir um método __repr__ é uma boa prática para todas as classes customizadas. Alguns pontos adicionais a considerar:

  • As informações retornadas por esse método devem ajudar na hora de depurar problemas.
  • O ideal é que o método retorne uma string que seja código Python válido, embora isso nem sempre seja possível.
  • Se o código Python válido não for viável, a convenção é retornar uma descrição entre sinais de maior e menor: < ...a practical description... >.

Conversão para string

Além do método __repr__, também pode ser necessário ter uma representação em string alternativa, "legível para humanos", da class. Isso pode ser usado para formatar o objeto para a saída do programa ou para a documentação. Isso é feito escrevendo um método especial __str__. Vejamos o datetime.datetime de novo:

>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'

Quando pedimos que um objeto datetime se converta para uma representação em string, ele retorna uma str formatada de acordo com o padrão ISO 8601, que a maioria das bibliotecas de data e hora consegue interpretar como uma data e hora legíveis para humanos.

Neste exercício, você terá a chance de escrever um método __str__ para o seu Clock, além de um método __repr__.

>>> str(Clock(11, 30))
'11:30'

Para dar suporte a essa conversão para string, você precisará criar um método especial __str__ na sua class que retorne uma string mais "legível para humanos", mostrando o horário do Clock.

Se você não criar um método __str__ e chamar str() na sua classe, o Python vai tentar chamar o __repr__ da sua classe como alternativa. Então, se você implementar apenas um desses dois métodos especiais, é melhor criar um __repr__ do que apenas um __str__.


Fonte

Sessão de pareamento com Erin Drummond
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Relógio?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.