Я сделал прототип модуля с целью построения сложных расписаний таймеров в python. Прототипы класса эмулируют объекты Timer, каждый со своим временем ожидания, объектами Repeat, которые группируют Timer и другие объекты Repeat, и класс Schedule, только для хранения всей конструкции или экземпляров Timers и Repeat. Конструкция может быть настолько сложной, насколько это необходимо, и должна быть гибкой.
Каждый из этих трех классов имеет метод .run()
, позволяющий пройти весь график. Независимо от класса, метод .run()
запускает таймер, группу повторов для определенного числа итераций или расписание.
Этот подход, ориентированный на полиморфизм, звучит или глупо? Какие еще подходящие подходы я должен рассмотреть, чтобы создать такую универсальную утилиту, которая позволила бы объединить все строительные блоки настолько сложным способом, насколько это необходимо с простотой?
Спасибо!
Вот код модуля:
#####################
## Importing modules
from time import time, sleep
#####################
## Class definitions
class Timer:
"""
Timer object with duration.
"""
def __init__(self, duration):
self.duration = duration
def run(self):
print "Waiting for %i seconds" % self.duration
wait(self.duration)
chime()
class Repeat:
"""
Repeat grouped objects for a certain number of repetitions.
"""
def __init__(self, objects=[], rep=1):
self.rep = rep
self.objects = objects
def run(self):
print "Repeating group for %i times" % self.rep
for i in xrange(self.rep):
for group in self.objects:
group.run()
class Schedule:
"""
Groups of timers and repetitions. Maybe redundant with class Repeat.
"""
def __init__(self, schedule=[]):
self.schedule = schedule
def run(self):
for group in self.schedule:
group.run()
########################
## Function definitions
def wait(duration):
"""
Wait a certain number of seconds.
"""
time_end = time() + float(duration) #uncoment for minutes# * 60
time_diff = time_end - time()
while time_diff > 0:
sleep(1)
time_diff = time_end - time()
def chime():
print "Ding!"