上下文管理协议(Context Management Protocol):包含方法 enter() 和 exit(),支持该协议的对象要实现这两个方法。
with实现了上下文管理协议,用户有__enter__和__exit__
class SQLHelper(object):
def open(self):
pass
def fetch(self,sql):
pass
def close(self):
pass
def __enter__(self):
self.open()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
# 原本要写
# obj = SQLHelper()
# obj.open()
# obj.fetch('select ....')
# obj.close()
with SQLHelper() as obj: # 自动调用类中的__enter__方法, obj就是__enter__返回值
obj.fetch('xxxx')
# 当执行完毕后,自动调用类 __exit__ 方法