Реалізуйте годинник, який працює з часом без дат.
Потрібно вміти додавати хвилини до годинника й віднімати їх від нього.
Два годинники, які показують той самий час, мають бути рівними один одному.
Тести цієї вправи очікують, що годинник буде реалізовано як class Clock.
Якщо ми ще не працювали з класами в Python, варто почати з classes та classes (з документації Python).
Коли ми працюємо з обʼєктами і налагоджуємо їх, важливо мати добре представлення цих обʼєктів.
Наприклад, якщо створити новий обʼєкт 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 - те, як його представлено у вигляді рядка тексту (англ. string).
Інші програмісти, які використовують або викликають Clock objects, створені з class Clock, будуть звертатися до цього рядкового представлення для налагодження та інших завдань.
Однак типове представлення для власного class не дуже допомагає:
>>> Clock(12, 34)
<Clock object st 0x102807b20 >
Щоб створити корисніше представлення, можна визначити __repr__ спеціальний метод у class.
У ідеалі метод __repr__ повертає коректний код Python, який можна використати, щоб відтворити обʼєкт, передавши його в eval(), як описано в специфікації методу __repr__.
Повертаючи коректний код Python, ми даємо іншому розробнику змогу скопіювати str безпосередньо в код або в REPL.
Clock, який представляє 11:30 AM, може мати такий вигляд:
`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, який більшість бібліотек для роботи з датами й часом можуть розібрати у зрозумілі для людини дату й час.
У цій вправі ми матимемо нагоду написати для свого годинника метод __str__, а також метод __repr__.
>>> str(Clock(11, 30))
'11:30'
Щоб підтримати це перетворення на рядок, потрібно створити спеціальний метод __str__ у своєму class, який повертає «зрозуміліший для людини» рядок тексту із часом годинника.
Якщо не створити метод __str__ і викликати str() для свого класу, Python спробує як запасний варіант викликати __repr__ для цього класу.
Тож якщо з цих двох спеціальних методів ми реалізуємо лише один, краще створити __repr__, а не тільки __str__.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.