您的位置:首页 > 编程语言 > Python开发

Python 让对象支持上下文管理协议

2017-06-19 00:00 585 查看
通过实现 __enter__() 和 __exit__() 方法可以使自定义的类支持 with 语句

例如:

class Open:

def __init__(self, filename, option):
self.filename = filename
self.option = option
self.fp = None

def read(self):
return self.fp.read()

def __enter__(self):
print('__enter__')
self.fp = open(self.filename, self.option)
return self

def __exit__(self, exc_type, exc_val, exc_tb):
print('__exit__')
self.fp.close()

with Open('text', 'r') as f:
print(f.read())

执行结果如下:

__enter__
python
javascript
django
mysql
__exit__

编写上下文管理器的主要原理是你的代码会放到 with 语句块中执行。 当出现 with 语句的时候,对象的 __enter__() 方法被触发, 它返回的值(如果有的话)会被赋值给 as 声明的变量。然后,with 语句块里面的代码开始执行。 最后,__exit__() 方法被触发进行清理工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python