我有几个帮助方法,我希望包含在我的所有插件中(比如在持久存储中操作列表或设置配置模板),但它看起来像是来自docs(和实际)插件必须只从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
答案 0 :(得分:1)
然而,从文档(以及实践中)来看,插件必须仅从BotPlugin和BotPlugin继承。
这是正确的,其原因主要与我们使用yapsy作为插件管理器的事实有关。它必须知道插件中哪个类实际加载(如果插件包含多个类)。
BotPlugin
类还包含插件可以使用的所有方法(以及它可能实现的所有回调),因此它也可以作为框架。
现在,根据您的实际问题,您可以使用mixin作为共享功能。定义一个可以由所有插件导入的公共类(例如class CommonFunctionalityMixin
),然后让这些插件继承BotPlugin
:
class MyPlugin(BotPlugin, CommonFunctionalityMixin):
# ...has all of BotPlugin as well as CommonFunctionalityMixin
有关此技术的真实示例,请参阅errcron。