Python实现华丽回调

来源:互联网 发布:linux命令查看磁盘空间 编辑:程序博客网 时间:2024/05/17 20:29
# _*_ coding: utf-8 _*_class CallbackBase:    def __init__(self):        self.__callbackMap = {}        for k in (getattr(self, x) for x in dir(self)):            if hasattr(k, "bind_to_event"):                self.__callbackMap.setdefault(k.bind_to_event, []).append(k)            elif hasattr(k, "bind_to_event_list"):                for j in k.bind_to_event_list:                    self.__callbackMap.setdefault(j, []).append(k)    @staticmethod    def callback(event):        def f(g, ev=event):            g.bind_to_event = ev            return g        return f    @staticmethod    def callbacklist(eventlist):        def f(g, evl=eventlist):            g.bind_to_event_list = evl            return g        return f    def dispatch(self, event):        l = self.__callbackMap[event]        f = lambda *args, **kargs: \            map(lambda x: x(*args, **kargs), l)        return fclass MyClass(CallbackBase):    EVENT1 = 1    EVENT2 = 2    @CallbackBase.callback(EVENT1)    def handler1(self, param=None):        return None    @CallbackBase.callbacklist([EVENT1, EVENT2])    def handler2(self, param=None):        print("handler2 with param: %s" % str(param))        return None    def run(self, event, param=None):        self.dispatch(event)(param)if __name__ == "__main__":    a = MyClass()    a.run(MyClass.EVENT1, 'mandarina')    a.run(MyClass.EVENT2, 'naranja')
阅读全文
0 0