Python with

 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__()方法。

原文地址:https://www.cnblogs.com/qqzj/p/6673790.html