程序第一次打印Expired。我希望代码在打印过期之前至少打印4次“未过期”。有人可以解释原因并帮我纠正代码。谢谢
import time
TIMEOUT = 5
class Timer ():
def __init__(self):
self.timeout = time.time()+TIMEOUT
def isExpired ():
return time.time() > self.timeout
timing = Timer()
def main():
while 1:
if timing.isExpired:
print "Expired"
return
else:
print "Not expired"
print "sleeping for 1 second"
time.sleep(1)
if __name__== "__main__":
main()
答案 0 :(得分:3)
你有几个问题:
您没有给自己的isExpired
方法一个自我论证。将其定义为def isExpired(self):
。
您正在每次循环迭代中创建一个新的Timer实例。将timing = Timer()
移到while循环之外。
timing.isExpired
是对方法对象iself的引用(在布尔上下文中始终为true)。您需要timing.isExpired()
来实际调用它。
这些都是与Timer
无关的基本Python问题。阅读the Python tutorial以了解如何使用课程等。
答案 1 :(得分:1)
您每次都在创建Timer
个实例。把它从循环中拿走,或者你的while循环永远不会终止。此外,您需要调用timing.isExpired
,因为它是一种方法。所以你的代码应该是:
import time
TIMEOUT = 60 * 5
class Timer ():
def __init__(self):
self.timeout = time.time()+TIMEOUT
def isExpired (self):
return time.time() > self.timeout
def main():
timing = Timer()
while 1:
if timing.isExpired():
print "Expired"
return
else:
print "Not expired"
print "sleeping for 1 second"
time.sleep(1)