Реализация системы плагинов на Python

Я пишу приложение (серверная оболочка для Minecraft), которое я хочу сделать расширяемым с помощью плагинов. У меня есть работающая система, но я думаю, что в конечном итоге ее можно было бы улучшить.

То, как я теперь приложение вызывает метод get_plugins в классе сервера, который сначала импортирует файл с именем pluginutils.py (pluginutils.py определяет класс BasePlugin, который является подклассом всех подключаемых модулей), а затем просматривает каждый файл .py в cmds , импортировав его и проверив, является ли он подклассом BasePlugin. Если это так, он сохраняет его экземпляр в словаре, для которого ключом является переменная класса cmd , определенная в подключаемом модуле. Каждый раз, когда приложение получает команду от сервера, оно проверяет, является ли это ключом в словаре, и, если да, запускает метод запуска экземпляра, хранящегося в словаре, которому оно передает необходимые аргументы, взятые из команды.

Хотя это работает, я чувствую, что это небрежный способ сделать это. Есть ли лучшие методы для реализации подобной системы? Я хочу написать это сам (я не хочу использовать что-либо вроде zope.interface), так как это опыт обучения. Спасибо.

8
задан Michael Smith 3 June 2011 в 22:59
поделиться