我在写申请书。别胡思乱想GUI:s或任何东西,只是一个简单的旧控制台应用程序。这个应用程序,我们称之为App,需要能够在启动时加载插件。所以,很自然地,我为插件创建了一个类来继承:
class PluginBase(object):
def on_load(self):
pass
def on_unload(self):
pass
def do_work(self, data):
pass
其思想是在启动时,App将遍历当前目录,包括子目录,搜索包含类的模块,这些模块本身就是PluginBase
的子类。在
更多代码:
^{pr2}$在search
的最后一行之后,我想以某种方式a)查找新加载模块中的所有类,b)检查这些类中是否有一个或多个是PluginBase
的子类,并且c)(如果b)实例化这些类并添加到App加载的模块列表中。在
我尝试过issubclass
和其他组合,然后是一段时间的紧张{
我在这里束手无策,感谢大家的帮助。在
如果您对插件编写器施加一些约束,例如所有插件都必须是包含返回插件实例的
load_plugin( app, config)
函数的包,那么这将变得更加容易。然后,您所要做的就是尝试导入这些包并运行函数。在你可以这样做:
为了测试上面的代码,我不得不修改一下您的代码;下面是完整的脚本。在
^{pr2}$以下是注册插件的元classier方法:
将
PluginBase
定义为PluginType
类型。PluginType
自动注册plugins
集中的任何实例(类)。在插件.py:
这是用户编写的部分。注意这里没有什么特别的。在
插件/我的插件.py:
^{pr2}$以下是搜索功能的外观:
测试.py:
跑步测试.py收益率
相关问题 更多 >
编程相关推荐