##
3 BaseHandler オブジェクト

`BaseHandler` オブジェクトは直接的に役に立つ 2 つのメソッド と、その他として導出クラスで使われることを想定したメソッドを 提供します。以下は直接的に使うためのメソッドです:

`add_parent`( | director)

  親オブジェクトとして、`director` を追加します。

`close`( | )

  全ての親オブジェクトを削除します。

以下のメンバおよびメソッドは `BaseHandler` から導出された クラスでのみ使われます: 注意: 慣習的に、`protocol_request()` や `protocol_response()` といったメソッドを定義している サブクラスは`*Processor` と名づけ、その他は`*Handler` と名づけることになっています

`parent`
  有効な `OpenerDirector` です。この値は違うプロトコルを 使って URL を開く場合やエラーを処理する際に使われます。

`default_open`( | req)

  このメソッドは `BaseHandler` では定義されて いません。 しかし、全ての URL をキャッチさせたいなら、サブクラスで定義する 必要があります。

  このメソッドが定義されていた場合、`OpenerDirector` から 呼び出されます。このメソッドは `OpenerDirector` の メソッド `open()` が返す値について記述されているようなファイル類似の オブジェクトか、`None` を返さなくてはなりません。 このメソッドが送出する例外は、真に例外的なことが起きない限り、 `URLError` を送出しなければなりません (例えば、 `MemoryError` を `URLError` をマップしては いけません)。

  このメソッドはプロトコル固有のオープンメソッドが呼び出される前に 呼び出されます。

protocol_open( | req)

  このメソッドは `BaseHandler` では定義されて いません。 しかしプロトコルの指定された URL をキャッチしたいなら、サブクラスで 定義する必要があります。

  このメソッドが定義されていた場合、`OpenerDirector` から 呼び出されます。戻り値は `default_open` と同じでなければ なりません。

`unknown_open`( | req)

  このメソッドは `BaseHandler` では定義されて いません。 しかし URL を開くための特定のハンドラが登録されていないような URL を キャッチしたいなら、サブクラスで定義する必要があります。

  このメソッドが定義されていた場合、`OpenerDirector` から 呼び出されます。戻り値は `default_open` と同じでなければ なりません。

`http_error_default`( | req, fp, code, msg, hdrs)

  このメソッドは `BaseHandler` では定義されて いません。 しかしその他の処理されなかった HTTP エラーを処理する機能をもたせたいなら、 サブクラスで定義する必要があります。このメソッドはエラーに遭遇した `OpenerDirector` から自動的に呼び出されます。その他の状況では 普通呼び出すべきではありません。

  req は `Request` オブジェクトで、 fp は HTTP エラー本体を読み出せるようなファイル類似のオブジェクトに なります。code は 3 桁の 10 進数からなるエラーコードで、 msg ユーザ向けのエラーコード解説です。hdrs は エラー応答のヘッダをマップしたオブジェクトです。

  返される値および送出される例外は `urlopen()` と同じ ものでなければなりません。

`http_error_nnn`( | req, fp, code, msg, hdrs)

  nnn は 3 桁の 10 進数からなる HTTP エラーコードでなくては なりません。このメソッドも `BaseHandler` では定義されていませんが、 サブクラスのインスタンスで定義されていた場合、エラーコード nnn の HTTP エラーが発生した際に呼び出されます。

  特定の HTTP エラーに対する処理を行うためには、このメソッドをサブクラスで オーバライドする必要があります。

  引数、返される値、および送出される例外は `http_error_default()` と同じものでなければなりません。

protocol_request( | req)

  このメソッドは`BaseHandler` では定義されていません が、 サブクラスで特定のプロトコルリクエストのプリプロセスを行いたい 場合には定義せねばなりません。

  このメソッドが定義されていると、親となる `OpenerDirector` から 呼び出されます。その際、req は`Request` オブジェクトに なります。戻り値は`Request` オブジェクトでなければなりません。

protocol_response( | req, response)

  このメソッドは`BaseHandler` では定義されていません が、 サブクラスで特定のプロトコルリクエストのポストプロセスを行いたい 場合には定義せねばなりません。

  このメソッドが定義されていると、親となる `OpenerDirector` から 呼び出されます。その際、req は`Request` オブジェクトに なります。 response は `urlopen()` の戻り値と同じインタフェースを 実装したオブジェクトになります。 戻り値もまた、`urlopen()` の戻り値と同じインタフェースを 実装したオブジェクトでなければなりません。