Orologio

Orologio

Facile

Istruzioni

Implementa un orologio che gestisce orari senza date.

Dovresti poter aggiungere e sottrarre minuti.

Due orologi che rappresentano lo stesso orario devono essere uguali tra loro.

Come viene implementato questo esercizio per il track Python

I test di questo esercizio si aspettano che l'orologio venga implementato in una class Clock. Se non conosci le classi in Python, classes e classi (dalla documentazione di Python) sono buoni punti da cui iniziare.

Rappresentare la classe

Quando lavori con gli oggetti e ne fai il debug, è importante avere una buona rappresentazione dell'oggetto. Per esempio, se crei un nuovo oggetto datetime.datetime nell'ambiente REPL di Python, puoi visualizzarne la rappresentazione come stringa:

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

La class Clock dovrebbe creare un object personalizzato che gestisce orari senza date. Un aspetto importante di questa class sarà come viene rappresentata come stringa. Altri programmatori che usano o chiamano gli objects Clock creati dalla class Clock si rifaranno a questa rappresentazione come stringa per il debug e altre attività. Tuttavia, la rappresentazione predefinita di una class personalizzata non è molto utile:

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

Per creare una rappresentazione più utile, puoi definire un metodo speciale __repr__ sulla class.

Idealmente, quel metodo __repr__ restituisce codice Python valido che può essere usato per ricreare l'oggetto quando viene passato a eval(), come descritto nella specifica di un metodo __repr__. Restituire codice Python valido permette a un altro sviluppatore di copiare e incollare direttamente la str nel codice o nel REPL. Un Clock che rappresenta le 11:30 potrebbe apparire così:

 `Clock(11, 30)`

Definire un metodo __repr__ è una buona pratica per tutte le classi personalizzate. Alcune cose aggiuntive da tenere a mente:

  • Le informazioni restituite da questo metodo dovrebbero essere utili quando si esegue il debug dei problemi.
  • Idealmente, il metodo restituisce una stringa che è codice Python valido, anche se non sempre è possibile.
  • Se il codice Python valido non è praticabile, la convenzione è restituire una descrizione tra parentesi angolari: < ...a practical description... >.

Conversione in stringa

Oltre al metodo __repr__, potrebbe esserci anche la necessità di una rappresentazione come stringa alternativa della class, «leggibile da una persona». Questa può servire a formattare l'oggetto per l'output del programma o per la documentazione. Si fa scrivendo un metodo speciale __str__. Guardiamo di nuovo datetime.datetime:

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

Quando a un oggetto datetime viene chiesto di convertirsi in una rappresentazione come stringa, restituisce una str formattata secondo lo standard ISO 8601, che la maggior parte delle librerie datetime è in grado di interpretare per ottenere una data e un'ora leggibili da una persona.

In questo esercizio avrai la possibilità di scrivere un metodo __str__ per la classe Clock, oltre a un metodo __repr__.

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

Per supportare questa conversione in stringa, dovrai creare un metodo speciale __str__ sulla class che restituisce una stringa più «leggibile da una persona», che mostra l'ora del Clock.

Se non crei un metodo __str__ e chiami str() sulla classe, Python proverà a chiamare __repr__ sulla classe come fallback. Quindi, se implementi solo uno di questi due metodi speciali, è meglio creare un __repr__ piuttosto che solo un __str__.


Fonte

Sessione di pair programming con Erin Drummond
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Orologio?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.