Pythonのコードを読んでハテナとなったのでググりました。
以下の3つの特別なメソッドがあるらしい。
__init__
Pythonのクラスのコンストラクタ。
__enter__
__exit__
この2つはセットで用意するもので、C#でusing句を使う感じだろうか、、、。Pythonでwith句内でオブジェクトが利用される。その際に__enter__メソッドが呼ばれ、with句を抜けるときに__exit__メソッドが呼ばれる。なので、リソースの確保、解放を行うとよさそう。
dackdive.hateblo.jp
勉強になりました。ありがとうございます。