사용자 도구

사이트 도구


python:event_manager

문서의 이전 판입니다!


Python: Event Manager

from threading import Timer
 
 
class Singleton(type):
    __instances = {}
 
    def __call__(cls, *args, **kwargs):
        if cls not in cls.__instances:
            cls.__instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls.__instances[cls]
 
 
class Event(list):
    __metaclass__ = Singleton
 
    def __init__(self):
        super(Event, self).__init__()
        self.event_manager = None
        self.name = None
 
    def add_handler(self, handler):
        self.append(handler)
        return self
 
    def remove_handler(self, handler):
        self.remove(handler)
        return self
 
    def fire(self, *args, **kwargs):
        for handler in self:
            handler(*args, **kwargs)
 
    __iadd__ = add_handler
    __isub__ = remove_handler
    __call__ = fire
 
 
class EventManager(dict):
    __metaclass__ = Singleton
 
    def __init__(self):
        super(EventManager, self).__init__()
 
    def __getattr__(self, event):
        return self[event]
 
    def __setattr__(self, event, value):
        self[event] = value
 
    def register_event(self, name):
        self[name] = Event()
        self[name].name = name
        self[name].event_manager = self
 
 
class Scheduler:
    @staticmethod
    def ticking(interval, func, iteration=0):
        if iteration != 1:
            Timer(interval, Scheduler.ticking, [interval, func, 0 if iteration == 0 else iteration - 1]).start()
        func()
python/event_manager.1454308811.txt.gz · 마지막으로 수정됨: (바깥 편집)