2016-11-06 8 views
1

私は、すべてのプラグイン(永続的なストレージ内のリストの操作や設定テンプレートの設定など)に含めるいくつかのヘルパーメソッドを持っていますが、ドキュメントのように見えますプラグインはBotPluginとBotPluginのみを継承しなければなりません。これは、これらの有用な振る舞いをすべて含み、個々のプラグインをそこから継承している私自身の基本的なbotクラスを持っているという私の最初の考えを取り除きます。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クラスには、プラグインが処理できるすべてのメソッド(および実装可能なすべてのコールバック)も含まれているため、そのためのフレームワークとしても機能します。

実際の質問では、共有機能としてmixinを使用できます。一般的なクラスを定義します(class CommonFunctionalityMixin、言うことができます)すべてのプラグインでインポートすることができ、それらのプラグインがBotPluginに加えて、それを継承してみましょう:

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

は、この技術の実世界の例えばerrcronを参照してください。

関連する問題