一個上下文管理器的類,最起碼要定義__enter__和__exit__方法。
讓我們來構(gòu)造我們自己的開啟文件的上下文管理器,并學(xué)習(xí)下基礎(chǔ)知識。
class File(object):
def __init__(self, file_name, method):
self.file_obj = open(file_name, method)
def __enter__(self):
return self.file_obj
def __exit__(self, type, value, traceback):
self.file_obj.close()
通過定義__enter__和__exit__方法,我們可以在with語句里使用它。我們來試試:
with File('demo.txt', 'w') as opened_file:
opened_file.write('Hola!')
我們的__exit__函數(shù)接受三個參數(shù)。這些參數(shù)對于每個上下文管理器類中的__exit__方法都是必須的。我們來談?wù)勗诘讓佣及l(fā)生了什么。
with語句先暫存了File類的__exit__方法File類的__enter__方法__enter__方法打開文件并返回給with語句opened_file參數(shù).write()來寫文件with語句調(diào)用之前暫存的__exit__方法__exit__方法關(guān)閉了文件