1 class Query(object): 2 3 def __init__(self, name): 4 self.name = name 5 6 def __enter__(self): 7 print('Begin') 8 return self #若返回self改为‘a',最后print q 为’a' 9 10 def __exit__(self, exc_type, exc_value, traceback): 11 if exc_type: #异常类型,异常值,异常跟踪信息 12 print('Error') # return False 抛出异常 13 else: 14 print('End') # return Turn 15 16 def query(self): 17 print('Query info about %s...' % self.name) 18 19 20 with Query('Bob') as q: 21 q.query()
with语句需要支持上下文管理协议的对象, 上下文管理协议包含__enter__和__exit__两个方法。with语句建立运行时上下文需要通过这两个方法执行进入和退出操作。
先执行__enter__()方法,然后将返回值赋值给了q,再执行with下面的语句,最后执行__exit__()方法。