2009-08-25 9 views
2

私はPythonのoptparseモジュールを使用して私のプログラムでコマンドライン引数を扱うクラスを持っています。また、パラメータのサブセットを作成するために複数のクラスに継承されます。オプションの解析メカニズムをカプセル化するには、クラスを継承するための関数add_optionだけを公開したいと思います。この機能の機能は、optparse.make_optionです。それは単に私のadd_option方法を持っていることをお勧め引数を* args&** kwargsとして転送する必要がありますか?

ですが、それはマニュアルにoptparse.make_optionと同じ引数を受け入れることを言うと、*args**kwargsとして引数を転送しますか?

事前にパラメータチェックを行う必要がありますか?ある意味では、特定のバージョンのoptparseからそのコードを切り離すためにこれを避けたいと思います。

+2

"add_option ...次にoptparse.make_optionを呼び出してください。"通常のadd_optionは何をしていますか?もしそうなら、それをなぜ無効にするのですか?なぜそれを無視しないのですか?サブクラスで表示されます。あなたは本当に何をしていますか? –

+0

このクラスは、このようないくつかのアプリケーションで使用されるフレームワーク部分にあります。それは、コマンドラインを含むいくつかのソースからパラメータを取得することができます。各アプリケーションはそこからサブクラス化し、特定のパラメータを追加する必要があります。あなたはそれをカプセル化するのではなく、 'optparse'をサブクラスに公開すべきだと言っていますか? –

+0

なぜあなたはそれを "カプセル化"していますか?複雑さを加える理由このカプセル化のメリットは何ですか?あなたの新しいクラスのユースケースは何ですか? –

答えて

1

あなたのサブクラスがコマンドラインのことを意識しているように思えますが、それは良い考えではありません。

プログラムのconfig入力部分全体をカプセル化して、コマンドライン、設定ファイル、その他のPythonプログラムなどで駆動できるようにします。

したがって、サブクラスからadd_optionの呼び出しを削除します。

実行時に設定要件がどのように見えるかを知りたい場合は、そのデータをサブクラスに追加するだけです。それぞれに必要なインプットの種類を把握するのに使用できるメンバーまたはメソッドを持つようにしてください。

次に、入力オーガナイザクラスを操作してこのデータを取り出し、コマンドライン、設定ファイル、その他のものを駆動するために使用できます。

しかし正直なところ、実行時にこれを行う必要はありませんでした。私は通常、すべての設定項目をそれ自身の別のものにします。「ユーザーはツールに何を伝える必要がありますか?」という質問に答え、サブクラスは設定データ構造を調べて必要なものを探します。

+0

非常に良い答えです。私は、コマンドラインパーサーをカプセル化するために、完全に構成可能にする方が良いことを理解しました。しかし、私は実際にS.Lottの提案をしてカプセル化をあきらめることにしました。 –

0

あなたはサブクラス化を実行してもよろしいですか?オーバーライド動作は、関数内に実装することができます。

関連する問題