使用BotPlugin继承

时间:2016-11-06 16:38:43

标签: errbot

我有几个帮助方法,我希望包含在我的所有插件中(比如在持久存储中操作列表或设置配置模板),但它看起来像是来自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

1 个答案:

答案 0 :(得分:1)

  

然而,从文档(以及实践中)来看,插件必须仅从BotPlugin和BotPlugin继承。

这是正确的,其原因主要与我们使用yapsy作为插件管理器的事实有关。它必须知道插件中哪个类实际加载(如果插件包含多个类)。

BotPlugin类还包含插件可以使用的所有方法(以及它可能实现的所有回调),因此它也可以作为框架。

现在,根据您的实际问题,您可以使用mixin作为共享功能。定义一个可以由所有插件导入的公共类(例如class CommonFunctionalityMixin),然后让这些插件继承BotPlugin

class MyPlugin(BotPlugin, CommonFunctionalityMixin):
  # ...has all of BotPlugin as well as CommonFunctionalityMixin

有关此技术的真实示例,请参阅errcron