メタクラスの存在と使用により、クラス作成プロセスの洗練されたハンドルが提供されるため、多くのコード作成から解放されることがわかりました。これをアプリケーションで使用します。そこでは、複数の相互作用するサーバーがインスタンス化されます。詳しく説明するには:
各デバイスは、その操作に固有のサーバー クラスをインスタンス化します。これは、最終的にこの 1 つのクラスのサブクラス (のサブクラス) ですBaseServer
。現在、一部のデバイス サーバーには が必要であり、一部のデバイス サーバーには(module: )ThreadedTCPserver
が必要です。を使用すると の動作がオーバーライドされるため、それらをすべて同じクラスから派生させることはできません。SimpleTCPServer
socketserver
ThreadingMixin
SimpleTCPServer
この動的なクラス構成を処理するためにMetaServerType
、BaseServer の基本クラスを as(SimpleTCPServer,)
または asとして選択する を作成しました(ThreadedTCPServer,)
--> 動的に構成されたサーバー クラスの望ましい結果を生成します! (ウーフー)
ここで質問があります。パラメータが保存されている構成ファイルを使用したいと考えています。これらのパラメータは、MetaServerType によってデフォルトで使用されます。例: config.default_loglevel、または config.default_handler など。また、メタクラスの仕様に従って、(コマンドラインまたはその他の方法で) 個々のサーバーをオーバーライドできます。
プログラム フローを介して渡される構成オブジェクトのインスタンスを 1 つだけ持つことは、良い設計方法ですか? これを行う 1 つの方法は、メタクラスのクラス本体で構成オブジェクトを初期化することですが、私のプログラム フローは別の場所で開始されます。これは、メタクラスが数回呼び出され、構成のさまざまなインスタンスが生成されることを意味します。インポート時にメタクラスが呼び出されているようです(?)
したがって、詳細な回答は大歓迎です:
- メタクラスに構成情報を提供するにはどうすればよいですか?
- 単一の構成インスタンスをプログラム フローに渡し、編集、更新、そしておそらく最終的に書き込む良い方法は何ですか?
- メタクラスへの入力引数を何らかの形で拡張できます
Metaclass.__new__(meta, name, bases, attrs)
か?- おまけの質問: これにより、(インスタンスではなく) 状態を「一時停止」または「再開」できるように、(サーバーの) 有限状態マシンに一歩近づきますか?