##
11.5.3 BaseHandler オブジェクト

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

`add_parent`( | director)

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

`close`( | )

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

以下のメンバおよびメソッドは `BaseHandler` から導出された クラスでのみ使われます:

`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()` と同じものでなければなりません。