用Python实现插件系统

Mic*_*ith 8 python plugins

我正在编写一个应用程序(Minecraft的服务器包装器),我希望通过插件进行扩展.我有一个适用的系统,但我认为从长远来看它可以使用改进.

我现在的方式是,应用程序在服务器类中调用一个"get_plugins"方法,首先导入一个名为pluginutils.py的文件(pluginutils.py定义一个BasePlugin类,所有插件都是子类),然后循环遍历每个.cmds目录中的py文件,导入它并检查它是否是BasePlugin的子类.如果是,则将其实例存储在字典中,其中键是插件中定义的cmd类变量.每当应用程序从服务器接收命令时,它都会检查它是否是字典中的键,如果是,则运行存储在字典中的实例的start方法,它将从命令中获取必要的参数.

虽然这有效,但我觉得这是一种草率的方式.有没有更好的技术来实现类似的系统?我想自己写这个(我不想使用像zope.interface这样的东西)因为这是一次学习经历.谢谢.

fea*_*thj 2

在不同平台和语言中编写了相当多不同的插件架构之后,我想说您已经了解了大多数插件系统的编写方式。

基本上可以归结为,你的主机和你的插件需要有某种共同的合同来使用;换句话说,您的主机需要足够了解您的插件,以便它可以传递或共享插件所需的任何公共资源,并且插件需要足够了解主机才能与这些资源进行交互。

正如您所做的那样,使用基类和派生类来实现这一点是一种非常常见的方法。