スタートアップ時にいくつかのモジュールがロードされています。すべてのモジュールには名前と送信機能があります。インポートされたモジュールにアクセスするには、それらをdictに格納し、dictキーでアクセスします。クラスをdictにclass.nameをキーとして保存する
m1 = Module1()
m2 = Module2()
modules = {m1.name: m1, m2.name: m2}
# now access a function
modules["m1_name"].send()
このアプローチはかなりうまく動作しますが、私には少し醜いようです。 「公式」な方法はありますか?
EDIT: 私は優先順位のリストを定義し、prios = ["signal", "telegram", "txt"]
を言って、プログラムは常に最優先でモジュールを使用しようとすると、グループの各ユーザーにメッセージを送信しようとします。 prio
リストのモジュールのみがインポートされます。
EDIT: 私のインポート機能は、次のようになります。
for modul_name in prios:
modul_import = importlib.import_module(("modules." + modul_name))
modul = modul_import.Modul(self.inbox)
modul.start()
modules[modul_name] = modul
なぜモジュールそのものの代わりに、ハードコードされ、 'name'の経由を使用してモジュールにアクセスしませんか?どのように他のモジュールが各モジュールのハードコードされた名前を知っているのですか?それはカプセル化を破るように見え、コード/デザインの匂いのようです。 – yangmillstheory