上下文管理器协议: __enter__ 和 __exit__ 构造方法
class Sample: def __enter__(self): print('enter') return self # 一定要返回自身 def __exit__(self, exc_type, exc_val, exc_tb): print('exit') def do_something(self): print('doing somthing') with Sample() as sample: # 实现了__enter__ 和 __exit__方法的Sample类就可以用with语句 sample.do_something()
// 打印
enter
doing something
exit
contextlib简单上下文管理器
import contextlib @contextlib.contextmanager # 必须装饰一个生成器方法 def file_open(file): print('file open') yield {} print('file close') with file_open('dylan.txt') as f: print('file processing')
// 打印
file open
file processing
file close