## 3 RequestHandlerオブジェクト

要求処理クラスでは、新たな `handle()` メソッドを定義 しなくてはならず、また以下のメソッドのいずれかを上書きすることができます。 各要求ごとに新たなインスタンスが生成されます。

`finish`( | )

  `handle()` メソッドが呼び出された後、何らかの後始末を行うために 呼び出されます。標準の実装では何も行いません。`setup()` または `handle()` が例外を送出した場合には、この関数は呼び出されません。

`handle`( | )

  この関数では、クライアントからの要求を実現するために必要な全ての作業を 行わなければなりません。デフォルト実装では何もしません。 この作業の上で、いくつかのインスタンス属性を 利用することができます; クライアントからの要求は `self.request` です; クライアントのアドレスは `self.client_address` です; そしてサーバごとの情報にアクセスする場合には、サーバインスタンスを `self.server` で取得できます。

  `self.request` の型はサービスがデータグラム型かストリーム型かで 異なります。ストリーム型では、`self.request` はソケットオブジェクト です; データグラムサービスでは、`self.request` は文字列になります。 しかし、この違いは要求処理サブクラスの`StreamRequestHandler` や `DatagramRequestHandler`を使うことで隠蔽することができます。 これらのクラスでは `setup()` および `finish()` メソッド を上書きしており、`self.rfile` および `self.wfile` 属性を 提供しています。 `self.rfile` および `self.wfile` は、要求データを取得したり クライアントにデータを返すために、それぞれ読み出し、書き込みを行うことが できます。

`setup`( | )

  `handle()` メソッドより前に呼び出され、何らかの必要な 初期化処理を行います。標準の実装では何も行いません。