python如何实现callback

来源:互联网 发布:c语言把字符a变成字符b 编辑:程序博客网 时间:2024/06/15 12:32

我用了一个python动态加载模块的方法,做了一个callback。也可以改写为加载多个插件。不多说 上代码

# coding:utf-8import os, os.path, sys'''callbackTest.py'''class MyApp:    _callbackList = []    def __init__(self):        #         scriptDir = os.path.join ( os.path.dirname(os.path.abspath(__file__)), "plugin" )        callbackDir = "XXXX/callback"   #绝对路径        print callbackDir#         将模块路径加到当前模块扫描的路径里        sys.path.insert(0, callbackDir)        for plug in os.listdir(callbackDir):#             print "plug: ",plug[-3:]            if (plug[-3:].lower() == ".py"):                print "__import__ ", os.path.basename(plug)[:-3]                m = __import__(os.path.basename(plug)[:-3]) #这里是关键步骤,动态import类                self._callbackList.append(m.CallbackModule())    def updateData(self):        self.runStart()        print "更新数据"        self.runEnd()    def runStart(self):        for p in self._callbackList:            p.start()    def runEnd(self):        for p in self._callbackList:            p.end()if (__name__ == "__main__"):    app = MyApp()    app.updateData()

下面是callback目录中的两个例子
第一个例子,在方法执行前后打印日志

# coding:utf-8'''log.py'''class CallbackModule(object):    def start(self):        print "log函数开始前调用该方法: ", "记录开始更新数据"    def end(self):        print "log函数结束后调用该方法: ", "记录更新完毕"

第二个例子

# coding:utf-8'''progress.py'''import datetimeclass CallbackModule(object):    today = datetime.datetime.now()    def start(self):        print "progress函数开始前调用该方法: ", datetime.datetime.strftime(self.today, '%Y-%m-%d %H:%M:%S')    def end(self):        print "progress函数结束后调用该方法: ", datetime.datetime.strftime(self.today, '%Y-%m-%d %H:%M:%S')
0 0