我正在編寫一個應用程序(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