1

我有几个我想在我的所有插件中包含的辅助方法(例如在持久存储中操作列表或设置配置模板),但是从文档(实际上)看起来插件必须继承自 BotPlugin 和仅限 BotPlugin。这破坏了我最初的想法,即拥有自己的包含所有这些有用行为的基本 bot 类,然后让各个插件从那里继承。

我很好奇为什么 errbot 是这样设置的,是否有合理的解决方法来启用插件类的继承?

例如:

class BaseBot(BotPlugin):
    # common methods

from base_bot import BaseBot
class MyPlugin1(BaseBot):
    # doesn't work, errbot won't detect the plugin
4

1 回答 1

1

但是从文档(和实践中)看来,插件必须仅从 BotPlugin 和 BotPlugin 继承。

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

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

现在,关于您的实际问题,您可以使用mixin来实现共享功能。class CommonFunctionalityMixin定义一个可以被所有插件导入的通用类(比如说, ),然后让这些插件从它继承BotPlugin

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

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

于 2016-11-06T17:54:43.963 回答