私は現在、ユーザーが「プラグイン」タイプのアーキテクチャを介してそれを拡張できるようにするアプリケーションを書いています。彼らは私が提供するBaseClassオブジェクトに基づいて追加のPythonクラスを書くことができ、これらはさまざまなアプリケーション信号に対してロードされます。プラグインとしてロードされるクラスの正確な数と名前は、アプリケーションが開始される前は不明ですが、起動時に1回だけロードされます。
これに取り組むための最良の方法を研究している間に、私は2つの一般的な解決策を思いつきました。
オプション1-imp、pkgutilなどを使用して自分でロール
します。
たとえば、この回答またはこれを参照してください。
オプション2-プラグインマネージャーライブラリを使用する
カップルをランダムに選択する
私の質問は、新しいプラグインをロードするためにアプリケーションを再起動する必要があるという条件で、このSOの回答や次のようなものから着想を得たものよりも上記の方法の利点はありますか?
import inspect
import sys
import my_plugins
def predicate(c):
# filter to classes
return inspect.isclass(c)
def load_plugins():
for name, obj in inspect.getmembers(sys.modules['my_plugins'], predicate):
obj.register_signals()
上記のアプローチと比較して、このアプローチに不利な点はありますか?(すべてのプラグインが同じファイルにある必要があることを除いて)ありがとう!
コメントの編集
はさらに情報を要求します...私が追加すると考えることができる唯一の追加のことは、プラグインがサブスクライブする信号を提供するためにブリンカーライブラリを使用することです。各プラグインは、さまざまなタイプのさまざまなシグナルをサブスクライブする可能性があるため、独自の「登録」メソッドが必要です。