python的插件和钩子调用机制
plugg的Python项目详细描述
Pluggy-一个最低限度的生产准备插件系统
这是pytest、tox和devpi项目使用的核心框架。
请阅读文档以了解更多信息!
一个明确的例子
importpluggyhookspec=pluggy.HookspecMarker("myproject")hookimpl=pluggy.HookimplMarker("myproject")classMySpec(object):"""A hook specification namespace. """@hookspecdefmyhook(self,arg1,arg2):"""My special little hook that you can customize. """classPlugin_1(object):"""A hook implementation namespace. """@hookimpldefmyhook(self,arg1,arg2):print("inside Plugin_1.myhook()")returnarg1+arg2classPlugin_2(object):"""A 2nd hook implementation namespace. """@hookimpldefmyhook(self,arg1,arg2):print("inside Plugin_2.myhook()")returnarg1-arg2# create a manager and add the specpm=pluggy.PluginManager("myproject")pm.add_hookspecs(MySpec)# register pluginspm.register(Plugin_1())pm.register(Plugin_2())# call our ``myhook`` hookresults=pm.hook.myhook(arg1=1,arg2=2)print(results)