Υλοποίησε ένα ρολόι που διαχειρίζεται ώρες χωρίς ημερομηνίες.
Θα πρέπει να μπορείς να προσθέτεις και να αφαιρείς λεπτά από αυτό.
Δύο ρολόγια που δείχνουν την ίδια ώρα θα πρέπει να είναι ίσα μεταξύ τους.
Τα τεστ αυτής της άσκησης περιμένουν ότι το ρολόι σου θα υλοποιηθεί σε μια class Clock.
Αν δεν είσαι εξοικειωμένος με τις κλάσεις στην Python, το classes και οι κλάσεις (από την τεκμηρίωση της Python) είναι καλά σημεία για να ξεκινήσεις.
Όταν δουλεύεις με αντικείμενα και κάνεις debugging, είναι σημαντικό να έχεις μια καλή αναπαράσταση αυτού του αντικειμένου.
Για παράδειγμα, αν δημιουργούσες ένα νέο αντικείμενο datetime.datetime στο περιβάλλον REPL της Python, θα μπορούσες να δεις την αναπαράσταση συμβολοσειράς του:
>>> from datetime import datetime
>>> new_date = datetime(2022, 5, 4)
>>> new_date
datetime.datetime(2022, 5, 4, 0, 0)
Η class Clock σου θα πρέπει να δημιουργεί ένα προσαρμοσμένο object που χειρίζεται ώρες χωρίς ημερομηνίες.
Μια σημαντική πτυχή αυτής της class θα είναι το πώς αναπαρίσταται ως συμβολοσειρά.
Άλλοι προγραμματιστές που χρησιμοποιούν ή καλούν objects Clock που δημιουργήθηκαν από την class Clock θα ανατρέχουν σε αυτή την αναπαράσταση συμβολοσειράς για debugging και άλλες δραστηριότητες.
Ωστόσο, η προεπιλεγμένη αναπαράσταση σε μια προσαρμοσμένη class δεν είναι και πολύ χρήσιμη:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Για να δημιουργήσεις μια πιο χρήσιμη αναπαράσταση, μπορείς να ορίσεις μια __repr__ ειδική μέθοδο στην class.
Ιδανικά, αυτή η μέθοδος __repr__ επιστρέφει έγκυρο κώδικα Python που μπορεί να χρησιμοποιηθεί για να αναδημιουργήσει το αντικείμενο όταν περαστεί στο eval(), όπως περιγράφεται στην προδιαγραφή για μια μέθοδο __repr__.
Η επιστροφή έγκυρου κώδικα Python επιτρέπει σε έναν άλλο προγραμματιστή να αντιγράψει και να επικολλήσει το str απευθείας σε κώδικα ή στο REPL.
Μια Clock που αναπαριστά τις 11:30 π.μ. θα μπορούσε να μοιάζει κάπως έτσι:
`Clock(11, 30)`
Ο ορισμός μιας μεθόδου __repr__ είναι καλή πρακτική για όλες τις προσαρμοσμένες κλάσεις.
Μερικά επιπλέον πράγματα που αξίζει να σκεφτείς:
< ...a practical description... >.Εκτός από τη μέθοδο __repr__, μπορεί επίσης να χρειάζεται μια εναλλακτική, "αναγνώσιμη από τον άνθρωπο", αναπαράσταση συμβολοσειράς της class.
Αυτή μπορεί να χρησιμοποιηθεί για να μορφοποιήσεις το αντικείμενο για έξοδο του προγράμματος ή για τεκμηρίωση.
Αυτό γίνεται γράφοντας μια ειδική μέθοδο __str__.
Ας δούμε ξανά το datetime.datetime:
>>> str(datetime.datetime(2022, 5, 4))
'2022-05-04 00:00:00'
Όταν ζητείται από ένα αντικείμενο datetime να μετατραπεί σε αναπαράσταση συμβολοσειράς, επιστρέφει ένα str μορφοποιημένο σύμφωνα με το πρότυπο ISO 8601, το οποίο οι περισσότερες βιβλιοθήκες datetime μπορούν να αναλύσουν σε μια αναγνώσιμη από τον άνθρωπο ημερομηνία και ώρα.
Σε αυτή την άσκηση, θα έχεις την ευκαιρία να γράψεις μια μέθοδο __str__ για το Clock σου, καθώς και μια μέθοδο __repr__.
>>> str(Clock(11, 30))
'11:30'
Για να υποστηρίξεις αυτή τη μετατροπή σε συμβολοσειρά, θα χρειαστεί να δημιουργήσεις μια ειδική μέθοδο __str__ στην class σου που επιστρέφει μια πιο "αναγνώσιμη από τον άνθρωπο" συμβολοσειρά που δείχνει την ώρα του Clock.
Αν δεν δημιουργήσεις μια μέθοδο __str__ και καλέσεις το str() στην κλάση σου, η Python θα προσπαθήσει να καλέσει το __repr__ στην κλάση σου ως εναλλακτική λύση.
Έτσι, αν υλοποιήσεις μόνο μία από αυτές τις δύο ειδικές μεθόδους, θα ήταν καλύτερα να δημιουργήσεις μια __repr__ αντί για μια σκέτη __str__.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.