
コンテキストマネージャの動作はわかっています
6
章で初めて
with
文が登場しました。このとき
with
文が終了するとファイルが自動的に
閉じられました。(
open
がコンテキストマネージャであるために)下のコードで
todos.txt
ファイルを開き、ファイル内の行を
1
行ずつ読んで表示してから自動的にファイルを閉じたこ
とを思い出してください。
with open('todos.txt') as tasks:
for chore in tasks:
print(chore, end='')
6
章で登場した
初めての
with
文
の
with
文をもう一度調べ、
__enter__
、
__exit__
、
__init__
が呼び出される場所を
特定しましょう。ここではコメントに番号を付け、それらの特殊メソッドが実行される順番を
わかりやすくしています。ここには初期化、前処理、後処理コードがありません。これら
のメ
ソッドは必要なときに「水面下で」実行されます。
with open('todos.txt') as tasks:
for chore in tasks:
print(chore, end='')
1.
インタプリタは
with
文を見ると、
open
の呼び出しに
関連する
__init__
を
まず呼び出します。
2. __init__
を実行すると、
__enter__
を呼び出して
open
の呼び出し結果を
変数
tasks
に代入します。
3. with
文が終了すると、コンテキスト
マネージャの
__exit__
を呼び出して
後片付けをします。この例では、 ...