Наследование с BotPlugin
У меня есть несколько вспомогательных методов, которые я хотел бы включить во все мои плагины (например, манипулирование списками в постоянном хранилище или настройка шаблонов конфигурации), однако из документов (и на практике) похоже, что плагины должны наследоваться от BotPlugin и Только BotPlugin. Это лишает меня первоначальной идеи иметь свой собственный базовый класс ботов, который включает в себя все эти полезные поведения, а затем наследовать от него отдельные плагины.
Мне любопытно, почему errbot был настроен таким образом, и если может быть разумный обходной путь для включения наследования классов плагинов?
Например:
class BaseBot(BotPlugin):
# common methods
from base_bot import BaseBot
class MyPlugin1(BaseBot):
# doesn't work, errbot won't detect the plugin
1 ответ
однако из документов (и на практике) похоже, что плагины должны наследоваться только от BotPlugin и BotPlugin.
Это правильно, и причины этого в основном связаны с тем, что мы используем yapsy в качестве нашего менеджера плагинов. Он должен знать, какой класс из плагина действительно загружать (в случае, если плагин содержит несколько классов).
BotPlugin
Класс также содержит все методы, которыми располагает плагин (и все обратные вызовы, которые он может реализовать), поэтому он также служит основой для этого.
Теперь, к вашему актуальному вопросу, вы можете использовать миксин для общей функциональности. Определите общий класс (скажем, class CommonFunctionalityMixin
), которые могут быть импортированы всеми вашими плагинами, тогда пусть эти плагины наследуются от него в дополнение к BotPlugin
:
class MyPlugin(BotPlugin, CommonFunctionalityMixin):
# ...has all of BotPlugin as well as CommonFunctionalityMixin
Смотрите errcron для реального примера этой техники.