Implementa um relógio que lida com horas, sem datas.
Deves conseguir adicionar e subtrair minutos ao relógio.
Dois relógios que representam a mesma hora devem ser iguais entre si.
Os testes deste exercício esperam que o teu relógio seja implementado numa class Clock.
Se não estás familiarizado com classes em Python, classes e classes (da documentação do Python) são bons pontos de partida.
Quando trabalhas com objetos e os depuras, é importante teres uma boa representação desse objeto.
Por exemplo, se criares um novo objeto datetime.datetime no ambiente REPL do Python, podes ver a sua representação em string:
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
A tua class Clock deve criar um object personalizado que trata de horas sem datas.
Um aspeto importante desta class será a forma como é representada como string.
Outros programadores que usem ou chamem objects Clock criados a partir da class Clock vão recorrer a esta representação em string para depurar e para outras atividades.
No entanto, a representação predefinida de uma class personalizada não é muito útil:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Para criares uma representação mais útil, podes definir um método especial __repr__ na class.
O ideal é que esse método __repr__ devolva código Python válido que possa ser usado para recriar o objeto quando passado a eval(), tal como está descrito na especificação de um método __repr__.
Devolver código Python válido permite que outro programador copie e cole a str diretamente no código ou no REPL.
Um Clock que representa as 11:30 da manhã podia ter este aspeto:
`Clock(11, 30)`
Definir um método __repr__ é uma boa prática para todas as classes personalizadas.
Há mais alguns aspetos a ter em conta:
< ...a practical description... >.Para além do método __repr__, pode também haver necessidade de uma representação em string alternativa "legível para humanos" da class.
Esta pode ser usada para formatar o objeto para a saída do programa ou para a documentação.
Isto faz-se escrevendo um método especial __str__.
Olhando novamente para datetime.datetime:
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
Quando se pede a um objeto datetime que se converta numa representação em string, este devolve uma str formatada de acordo com a norma ISO 8601, que a maioria das bibliotecas de datetime consegue interpretar como uma data e uma hora legíveis para humanos.
Neste exercício, vais ter a oportunidade de escrever um método __str__ para o teu Clock, bem como um método __repr__.
>>> str(Clock(11, 30))
'11:30'
Para suportar esta conversão para string, vais precisar de criar um método especial __str__ na tua class que devolva uma string mais "legível para humanos" com a hora do Clock.
Se não criares um método __str__ e chamares str() sobre a tua classe, o Python vai tentar chamar __repr__ sobre a tua classe como alternativa.
Por isso, se implementares apenas um destes dois métodos especiais, é melhor criares um __repr__ do que apenas um __str__.
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.