python中的一个简单时钟类
我想向这个类添加一个名为setTime的方法,它以小时、分钟和秒为参数,并对对象的属性进行适当的更改。下面的代码使用这个类和方法setTimepython中的一个简单时钟类,python,Python,我想向这个类添加一个名为setTime的方法,它以小时、分钟和秒为参数,并对对象的属性进行适当的更改。下面的代码使用这个类和方法setTime Class Clock: def __init__(self): self._hours = 12 self._minutes = 0 self._seconds = 0 def getHours(self): return self._hours def
Class Clock:
def __init__(self):
self._hours = 12
self._minutes = 0
self._seconds = 0
def getHours(self):
return self._hours
def getMinutes(self):
return self._minutes
def getSeconds(self):
return self._seconds
def show(self):
print "%d:%02d:%02d" % (self._hours, self._minutes, self._seconds)
我的问题是我的设置时间方法是否正确?另外,如何检查我的函数是否正确?除了两件事之外,我觉得它是正确的。您可能希望删除默认值;它们似乎没有必要。您希望对值进行范围检查,如果值超出范围,则引发ValueError 一个简单的测试是将时钟设置为某个值,然后获取数据并进行检查;重复几个值。这可以自动化;doctest模块使用起来相当简单 编辑: 下面是一个使用doctest的示例。测试直接进入模块中任何位置的docstring。testmod查找它们,并尝试将它们当作交互式会话来运行。如果输出不符合预期,它会这样说。如果一切顺利,就没有产出
clk = Clock()
clk.setTime(12, 34, 2)
print clk.getHours()
clk.show()
def setTime(self, hours = 12, minutes = 34, seconds = 2):
self._hours = hours
self._minutes = minutes
self._seconds = seconds
您的setTime方法是正确的,但是将默认的小时、分钟和秒设置为这样的任意数字似乎有些奇怪。也许小时=12,分钟=0,秒=0更有意义?也许甚至完全取消默认值也是最好的
您没有任何验证-如果有人使用您的类并意外地将小时数设置为29,该怎么办
最后,正如我在评论中提到的,您可以通过尝试来测试您的函数。在简单的情况下,它是否做了正确的事情?它使用默认值做正确的事情吗?如果你掷负秒会发生什么?你想发生什么?这些都是测试一个方法或类时应该考虑的事情——它是否在预期的情况下工作,并且它在所有特殊的/角落的情况下工作。
对于您的示例,您可以编写一个简单的单元测试,如下所示:
然后,您可以根据需要添加更多测试请注意,每个单元测试只应测试一件事。您可以在类构造函数中初始化时间:
def testSetTime():
clock = Clock()
clock.setTime(2, 18, 36)
assert clock.getHours() == 2
assert clock.getMinutes() == 18
assert clock.getSeconds() == 36
然后
getter和setter c.getX等是非Pythonic的;如果需要一些转换,请使用如上所述的类属性方法,否则直接使用Clock.milTime访问属性。您可以通过尝试来检查函数是否正确。这叫做测试;在这种情况下,您甚至可以编写一个测试,只需一个小注释,开始时使用的class关键字应该都是小写的class,而不是class。这可能是一个输入错误,但是,因为你似乎还没有运行代码。既然我不知道如何创建测试函数,你能提供一个模块来编写测试函数吗?@hkus10,我们不是来为你做东西的,而是帮你做的。如果你想有人为你写一个模块,请雇佣一个自由职业者。我们花了很多时间回答你的问题,我们预计不会得到回报。所以请谅解。如果您不知道如何创建模块来编写测试函数,请进行一些研究。首先,你可以用谷歌搜索它,然后你会得到很多对你有帮助的结果。我重复一遍,我们不是来为你的项目编码的,而是来帮助你的。谢谢
def testSetTime():
clock = Clock()
clock.setTime(2, 18, 36)
assert clock.getHours() == 2
assert clock.getMinutes() == 18
assert clock.getSeconds() == 36
Class Clock:
def __init__(self, hours, minutes, seconds):
self._hours = hours
self._minutes = minutes
self._seconds = seconds
....
clk = Clock(12, 34, 2)
class Clock(object):
def __init__(self, hour=12, minute=0, second=0, milTime=False):
super(Clock,self).__init__()
self.hour = hour
self.minute = minute
self.second = second
self.milTime = milTime # 24-hour clock?
@property
def hour(self):
return self._hour if self.milTime else ((self._hour-1) % 12)+1
@hour.setter
def hour(self, hour):
self._hour = hour % 24
@property
def minute(self):
return self._minute
@minute.setter
def minute(self, minute):
self._minute = minute % 60
@property
def second(self):
return self._second
@second.setter
def second(self, second):
self._second = second % 60
@property
def time(self):
return self.hour, self.minute, self.second
@time.setter
def time(self, t):
self.hour, self.minute, self.second = t
def __str__(self):
if self.milTime:
return "{hr:02}:{min:02}:{sec:02}".format(hr=self.hour, min=self.minute, sec=self.second)
else:
ap = ("AM", "PM")[self._hour >= 12]
return "{hr:>2}:{min:02}:{sec:02} {ap}".format(hr=self.hour, min=self.minute, sec=self.second, ap=ap)
c = Clock(12, 15, 10)
print c # -> 12:15:10 PM
c.milTime = True
print c # -> 12:15:10
c.hour = 9
print c # -> 09:15:10
c.milTime = False
print c # -> 9:15:10 AM
c.time = 12,34,2
print c # -> 12:34:02 PM