Clock Problem Explained(exercism.io):
Implement a clock that handles times without dates.
Create a clock that is independent of date.
You should be able to add and subtract minutes to it.
Two clocks that represent the same time should be equal to each other.
Print time HH:MM
"+" or "-" Minutes
Independent of date
Military format
Compare two clocks
Add minutes
Source
Pairing session with Erin Drummond https://twitter.com/ebdrummond
Solution
class Clock:
_objecx = []
The _objecx
member variable will store all the initialized clock objects.
def __new__(cls, hour, minute):
for objec in _objecx:
if cls.obj == objec:
return objec
return cls.obj
Use __new__
when you need to control the creation of a new instance. __new__
is the first step of instance creation. It’s called first, and is responsible for returning a new instance of your class. In general, you shouldn’t need to override __new__
unless you’re subclassing an immutable type like str, int, unicode or tuple. Here creates new clock if not already exist.
def __init__(self, hour, minute):
self.hour = (hour + (minute // 60)) % 24
self.minute = minute % 60
Use __init__
when you need to control initialization of a new instance. In contrast, __init__
doesn’t return anything; it’s only responsible for initializing the instance after it’s been created. The clock time formatted and initialized object.
def __eq__(self, another):
return self.hour == another.hour and self.minute == another.minute
If you want your custom objects to be only comparable for equality with other objects, then you can provide the __eq__
methord. Comparing two clocks and equalize.
def __str__(self):
return "{0:02d}:{1:02d}".format(self.hour, self.minute)
Python has two different ways to convert an object to a string: str() and repr(). Printing an object uses str(); printing a list containing an object uses str() for the list itself, but the implementation of list. __str__()
calls repr()
for the individual items. Python3 string formatting function.'{:02d}:{:02d}'
- 0 is first digit, 2 digits, d is for integer format.
def add(self, minute_x):
return Clock(self.hour, self.minute + minute_x)
Defined the __add__
method in Clock
class to perform vector addition and then the plus operator would behave as per expectation.
Inspirational quote
The mark of a mature programmer is willingness to throw out code you spent time on when you realize it’s pointless. -Bram Cohen