这里有一个固定的重写,使用相同的测试。
setter负责正确设置小时和分钟的值(尽管hours的setter无法正确地添加超过一天的值,但是这很容易根据与分钟相同的模型添加)。在
那么tic()只是添加一分钟的快捷方式。在
注释掉print语句以删除所有小时:分钟。在
注意:我已经将Clock转换为一个“新样式”类对象,它允许使用属性修饰符并使所有内容更具可读性(这对于python3来说不是必需的,但对于让相同的代码也能在python2中工作是必要的)。在class Clock(object):
def __init__(self):
self._hours = 0
self._minutes = 0
@property
def hours(self):
return self._hours
@property
def minutes(self):
return self._minutes
@minutes.setter
def minutes(self, value):
if value >= 60:
# Take care, if one adds more than one hour, to
# take the extra hours into account too:
self.hours += value // 60
self._minutes = value % 60
@hours.setter
def hours(self, value):
self._hours = value % 24
def tic(self):
self.minutes += 1
c = Clock()
assert(c.minutes == 0 and c.hours == 0)
for i in range(24):
assert(c.hours == i)
for j in range(60):
assert(c.hours == i and c.minutes == j)
c.tic()
print('{}:{}'.format(c.hours, c.minutes))
assert(c.minutes == 0 and c.hours == 0)
摘录和输出结尾:
^{pr2}$