我正在编写一个应用程序(Minecraft的服务器包装),我希望通过插件进行扩展。我有一个可行的系统,但我认为从长远来看,它可以使用改进。在Python中实现插件系统
我现在拥有它的方式是,应用程序在服务器类中调用一个“get_plugins”方法,首先导入一个名为pluginutils.py的文件(pluginutils.py定义了一个所有插件子类的BasePlugin类),然后遍历目录cmd中的每个.py文件,导入它并检查它是否是BasePlugin的子类。如果是,它会将它的一个实例存储在字典中,其中的关键是插件中定义的类变量。每当应用程序收到来自服务器的命令时,它都会检查它是否是字典中的一个键,如果是,则运行存储在字典中的实例的start方法,并将其从命令中获取的必要参数传递给它。
虽然这样做,我觉得这是一个马虎的做法。有没有更好的技术来实现类似这样的系统?我想自己写这个(我不想使用任何类似zope.interface的东西),因为这是一种学习体验。谢谢。
我好奇; **如何检查插件是否具有子类BasePlugin类? – tMC 2011-06-03 23:13:20
@tMC您可以使用Class .__子类__(),它返回类(BasePlugin)的子类列表。我检查他们对这个名单。 – 2011-06-03 23:15:46
谢谢,我不知道;这将是非常有用的! – tMC 2011-06-03 23:18:11