###
6.20.5.3 拡張を行う他の理由 `optparse`

新たな型やアクションの追加は、`optparse` を拡張しようと考える 大きな、かつ明白な理由です。その他に少なくとも二つの分野がかかわって くると考えています。

一つ目の理由は簡単なものです: `OptionParser` は必要に応じて、 すなわちコマンドラインにエラーが生じたときはユーザがヘルプを要求 した際に `sys.exit()` を呼び出して役に立とうとします。 前者の場合、スクリプトをクラッシュさせてトレースバックを出力する 伝統的なやり方は受け入れがたいものです; このような応答を行うと、 ユーザはコマンドラインエラーを起こしたときにスクリプトにバグが あるのだと考えさせてしまいます。後者の場合、一般的にはヘルプを 出力した後に継続する利点はあまりありません。

この動作が目障りなら、 ``修正'' するのはさほど難しいことでは ありません。以下の実装をおこなわねばなりません。

1. OptionParser をサブクラス化して error() メソッドを上書きします
2. Option をサブクラス化して take_action() メソッドを上書きします -- アクション "help" の処理を自前で提供し、sys.exit() を呼ばない 用にする必要があるでしょう

もう一つの理由は、より複雑ですが、`optparse` で実装されている コマンドライン文法をオーバライドするということです。 この場合、オプションに対するアクションと型の機構はすべて捨ておき、 `sys.argv` を処理するコードを上書きします。 いずれの場合も、`OptionParser` をサブクラス化する必要があります; どれくらい徹底的に書き換えたいかによって、 `parse_args()`、 `_process_long_opt()`、および `_process_short_opts()` について、一つからすべてのメソッド を上書きする必要があるでしょう。

これらは両方とも、読者の練習課題として残しておきます。 実は私は両方とも自分では書いたことがありません。というのも、 `optparse` のデフォルトの (自然な) 動作で十分ハッピーで いられるからです。

Happy hacking、 そしてこの言葉を忘れないでください: ルークよ、source を使え (Use the Source, Luke)。