###
6.20.3.2 オプションを定義する

各 `Option` インスタンスは、同じ意味を持つ一群のコマンドライン オプション、すなわち同じ意味と効果をもつが、つづりが異なるような オプションを表します。任意の数の短いオプションと長いオプションを 指定することができますが、少なくとも一つのオプション文字列を与え なければなりません。

短い形式のオプション文字列を一つだけもつオプションを定義するには 以下のようにします:

    make_option("-f", ...)

長い形式のオプション文字列を一つだけもつオプションを定義するには 以下のようにします:

    make_option("--foo", ...)

``...'' は、`Option` オブジェクトの属性を定義する一群の キーワード引数を表しています。ある `Option` に対してどのような キーワードを与えれば十分かという問題はかなり複雑です (信じられない というなら、`Option` の数々の `_check_*()` メソッド群を 調べてみてください) が、だいたい 何がしか 指定しなければ なりません。うまく指定されていなければ、`optparse` は `OptionError` 例外を送出し、犯した間違いを説明してくれます。

オプションの中でもっとも重要な属性はアクション、すなわちコマンドライン 中でそのオプションが見つかったときにどうするかを決める属性です。 とりうるアクションを以下に挙げます:

store
  [default] このオプションに対する引数を値として保存します。
store_const
  定数値を保存します。
store_true
  真を表す値を保存します。
store_false
  偽を表す値を保存します。
append
  このオプションに対する引数をリストに追加します。
count
  カウンタを 1 増やします。
callback
  指定された関数を呼び出します。
help
  全てのオプションとそれに対するドキュメントを含めた、使用法メッセージ を出力します。

(アクションを指定しなければ、デフォルト値は ``store'' になります。 このアクションでは、 type と dest キーワードを 与えることができます; 以下を参照してください。)

ご覧のとおり、ほとんどのアクションは何らかの値を保存したり 更新したりする処理を含んでいます。`optparse` はこの処理の ために、常に特定のオブジェクト(`Values` クラスのインスタンス) を生成します。オプション引数 (とその他数々の値) は、 `make_option()`/`add_option()` の引数 dest (目的変数) に従って、このオブジェクトの属性として保存されます。

例えば、以下の呼び出し:

    parser.parse_args()

を行うと、`optparse` は最初に行うことの一つとして、 values オブジェクトを生成します:

    values = Values()

このパーザのオプションの一つが、以下:

    make_option("-f", "--file", action="store", type="string", dest="filename")

のように定義されており、解析しているコマンドライン中に以下:

    -ffoo
    -f foo
    --file=foo
    --file foo

の文字列が含まれていれば、`optparse` は -f や --file オプションを見つけた際に、以下のコード:

      values.filename = "foo"

と同じ処理を行います。 明らかに、type と dest 引数は (大抵) action と ほぼ同じくらい大事なものです。 action は *全ての* オプションで 意味をなす唯一の属性ですが、最も重要な属性でもあります。