Implémente une horloge qui gère des heures sans date.
Tu dois pouvoir y ajouter des minutes et en soustraire.
Deux horloges qui représentent la même heure doivent être égales entre elles.
Les tests de cet exercice supposent que ton horloge sera implémentée sous la forme d'une class Clock.
Si les classes en Python ne te sont pas familières, classes et les classes (d'après la documentation Python) sont de bons points de départ.
Lorsqu'on travaille avec des objets et qu'on les débogue, il est important d'avoir une bonne représentation de cet objet.
Par exemple, si on crée un nouvel objet datetime.datetime dans l'environnement REPL de Python, on peut afficher sa représentation sous forme de string :
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
Ta class Clock doit créer un object personnalisé qui gère des heures sans dates.
Un aspect important de cette class sera la façon dont elle est représentée sous forme de string.
Les autres programmeurs qui utilisent ou appellent des objects Clock créés à partir de la class Clock se référeront à cette représentation sous forme de string pour le débogage et pour d'autres activités.
Cependant, la représentation par défaut d'une class personnalisée n'est pas très utile :
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Pour créer une représentation plus utile, tu peux définir une méthode spéciale __repr__ sur la class.
Dans l'idéal, cette méthode __repr__ renvoie du code Python valide qui peut servir à recréer l'objet quand on le passe à eval(), comme le décrit la spécification d'une méthode __repr__.
Renvoyer du code Python valide permet à un autre développeur de copier-coller la str directement dans du code ou dans le REPL.
Une Clock qui représente 11 h 30 pourrait ressembler à ceci :
`Clock(11, 30)`
Définir une méthode __repr__ est une bonne pratique pour toutes les classes personnalisées.
Voici quelques points supplémentaires à garder en tête :
< ...a practical description... >.En plus de la méthode __repr__, il peut aussi être nécessaire de disposer d'une autre représentation de la class sous forme de string, « lisible par un humain ».
Celle-ci peut servir à formater l'objet pour la sortie d'un programme ou pour de la documentation.
Pour cela, on écrit une méthode spéciale __str__.
Reprenons datetime.datetime :
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
Quand on demande à un objet datetime de se convertir en une représentation sous forme de string, il renvoie une str formatée selon la norme ISO 8601, que la plupart des bibliothèques de gestion des dates peuvent analyser pour obtenir une date et une heure lisibles par un humain.
Dans cet exercice, tu auras l'occasion d'écrire une méthode __str__ pour ton horloge, ainsi qu'une méthode __repr__.
>>> str(Clock(11, 30))
'11:30'
Pour prendre en charge cette conversion en string, tu devras créer une méthode spéciale __str__ sur ta class qui renvoie une string plus « lisible par un humain » affichant l'heure de l'horloge.
Si tu ne crées pas de méthode __str__ et que tu appelles str() sur ta classe, Python essaiera d'appeler __repr__ sur ta classe en dernier recours.
Donc si tu n'implémentes qu'une seule de ces deux méthodes spéciales, mieux vaut créer une __repr__ plutôt qu'une __str__.
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.