Я пишу небольшой объект часов в Python, который можно запустить, остановить и сбросить. Мне трудно понять, как правильно отслеживать накопление времени. Прямо сейчас, как записывается процедура обновления, часы накапливают слишком много времени (из-за вызовов метода обновления). Я не уверен, как написать это так, чтобы она накапливала правильное время.Как правильно обращаться с аккумулятором в часах Python?
import time
import datetime
class Clock(object):
def __init__(
self,
name = None,
start = True
):
self._name = name
self._start = start # Boolean start clock on instantiation
# If a global clock list is detected, add a clock instance to it.
if "clocks" in globals():
clocks.add(self)
self.reset()
if self._start:
self.start()
def start(self):
self._startTime = datetime.datetime.utcnow()
def stop(self):
self._startTime = None
# Update the clock accumulator.
def update(self):
self.accumulator += (
datetime.datetime.utcnow() - self._startTime
)
def reset(self):
self.accumulator = datetime.timedelta(0)
self._startTime = None
# If the clock has a start time, add the difference between now and the
# start time to the accumulator and return the accumulation. If the clock
# does not have a start time, return the accumulation.
def elapsed(self):
if self._startTime:
self.update()
return(self.accumulator)
def time(self):
return(self.elapsed().total_seconds())
clock = Clock()
print clock.time()
print "starting"; clock.start()
for i in range(4):
time.sleep(3)
print clock.time()
print "stopping"; clock.stop()
for i in range(4):
time.sleep(3)
print clock.time()
print "starting"; clock.start()
for i in range(4):
time.sleep(3)
print clock.time()
print "resetting"; clock.reset()
print clock.time()
Каково ваше ожидаемое время выхода? С небольшим изменением я получаю его «0, 3, 6, 9, 12, 12, 12, 12, 12, 15, 18, 21, 24, 0'. Желательно? – sberry
Почему вы добавляете время с начала, а не просто устанавливаете его с момента запуска? – Amber
@Amber, вы правы, за исключением того, что написано 'start', если' update' просто устанавливал 'self.accumulator', а не добавлял к нему, то« start »по существу вызывал бы сброс. Очевидно, это можно было бы написать так, чтобы это было не так, но, поскольку оно стоит, оно нарушалось бы с этим изменением. – sberry