
enter exit init
メソッドを使ってコンテキストを管理する
コンテキストマネジメントプロトコルは難しそうに思えますが、実際にはとても単
純です。少なくとも
2
つの特殊メソッド
__enter__
と
__exit__
を定義します。こ
れがコンテキストマネジメントプロトコルです。このプロトコルを守れば、クラスを
with
文に関連付けられます。
__enter__
は前処理を行う
オブジェクトを
with
と一緒に使うと、インタプリタは
with
文のブロックを開
始する前にオブジェクトの
__enter__
メソッドを呼び出します。これにより、
__
enter__
内で必要な前処理コードを実行できます。
さらに、このプロトコルでは
__enter__
が
with
文に値を返すことができる(しか
し、返さなくてもよい)と定義されています(これが重要である理由はこれから説明し
ます)。
__exit__
は後処理を行う
with
文の終了直後に、インタプリタは必ずオブジェクトの
__exit__
メソッドを
呼び出します。
__exit__
メソッドを
with
のブロック終了後に呼び出して、必要な
後処理を行います。
__enter__
と
__exit__
を定義するクラスを作成すると、インタプリタは自動的
にそのクラスをコンテキストマネージャとみなすため、
with
文を使えます。言い換え
ると、このようなクラスはコンテキストマネジメントプロトコルに従っており、コンテ
キストマネージャを実装します。
__init__
は初期化を行う
__enter__ ...