Implementiere eine Uhr, die Uhrzeiten ohne Datum verarbeitet.
Du solltest Minuten zu ihr addieren und von ihr subtrahieren können.
Zwei Uhren, die dieselbe Zeit darstellen, sollten gleich sein.
Die Tests für diese Übung erwarten, dass deine Uhr in einer class namens Clock umgesetzt wird.
Wenn du mit Klassen in Python noch nicht vertraut bist, sind classes und Klassen (aus der Python-Dokumentation) gute Ausgangspunkte.
Wenn du mit Objekten arbeitest und sie debuggst, ist es wichtig, eine gute Darstellung dieses Objekts zu haben.
Wenn du zum Beispiel ein neues datetime.datetime-Objekt in der Python-REPL-Umgebung erstellst, kannst du dir seine String-Darstellung ansehen:
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
Deine Clock-class soll ein eigenes object erzeugen, das Zeiten ohne Datum verarbeitet.
Ein wichtiger Aspekt dieser class wird sein, wie sie als String dargestellt wird.
Andere Programmierer, die Clock-objects verwenden oder aufrufen, die aus der Clock-class erzeugt wurden, greifen beim Debuggen und bei anderen Tätigkeiten auf diese String-Darstellung zurück.
Die Standarddarstellung einer eigenen class ist allerdings nicht sehr hilfreich:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Um eine hilfreichere Darstellung zu erzeugen, kannst du eine __repr__-spezielle Methode in der class definieren.
Idealerweise gibt diese __repr__-Methode gültigen Python-Code zurück, mit dem sich das Objekt neu erzeugen lässt, wenn man ihn an eval() übergibt. Das ist in der Spezifikation für eine __repr__-Methode beschrieben.
Wenn du gültigen Python-Code zurückgibst, kann ein anderer Entwickler den str direkt in den Code oder die REPL kopieren.
Eine Clock, die 11:30 Uhr darstellt, könnte so aussehen:
`Clock(11, 30)`
Eine __repr__-Methode zu definieren, ist für alle eigenen Klassen eine gute Praxis.
Ein paar zusätzliche Punkte, die du beachten solltest:
< ...a practical description... >.Neben der __repr__-Methode kann auch eine alternative, „menschenlesbare“ String-Darstellung der class nötig sein.
Diese kann verwendet werden, um das Objekt für die Programmausgabe oder die Dokumentation zu formatieren.
Dafür schreibst du eine spezielle Methode namens __str__.
Schauen wir uns datetime.datetime noch einmal an:
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
Wenn ein datetime-Objekt sich in eine String-Darstellung umwandeln soll, gibt es einen str zurück, der nach dem ISO-8601-Standard formatiert ist. Diesen können die meisten Datetime-Bibliotheken in ein menschenlesbares Datum und eine Uhrzeit parsen.
In dieser Übung bekommst du die Gelegenheit, eine __str__-Methode für deine Uhr zu schreiben, ebenso wie eine __repr__-Methode.
>>> str(Clock(11, 30))
'11:30'
Um diese String-Konvertierung zu unterstützen, musst du eine spezielle __str__-Methode in deiner class anlegen, die einen eher „menschenlesbaren“ String zurückgibt, der die Uhrzeit anzeigt.
Wenn du keine __str__-Methode anlegst und str() für deine Klasse aufrufst, versucht Python ersatzweise, __repr__ für deine Klasse aufzurufen.
Wenn du also nur eine dieser beiden speziellen Methoden implementierst, ist es besser, eine __repr__ anzulegen statt nur eine __str__.
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.