python如何实现callback

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

# coding:utf-8
import 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 datetime
class 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')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值