Python 让对象支持上下文管理协议
2017-06-19 00:00
585 查看
通过实现 __enter__() 和 __exit__() 方法可以使自定义的类支持 with 语句
例如:
执行结果如下:
编写上下文管理器的主要原理是你的代码会放到 with 语句块中执行。 当出现 with 语句的时候,对象的 __enter__() 方法被触发, 它返回的值(如果有的话)会被赋值给 as 声明的变量。然后,with 语句块里面的代码开始执行。 最后,__exit__() 方法被触发进行清理工作。
例如:
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-使对象支持上下文管理-29
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- [00803]让对象支持上下文管理协议
- python基础----实现上下文管理协议__enter__和__exit__
- Python概念-上下文管理协议中的__enter__和__exit__
- Python系列之 - 上下文管理协议
- python上下文管理协议
- Python对象协议
- python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作
- Python之上下文管理
- Python的系统管理_10_python_类与对象
- Python持久性管理——使用序列化存储Python对象
- python模块:网络协议和支持
- 【close】fans-rt 对象管理支持同类不同长度的对象(新需求)
- Python3学习笔记10-标准库之正则、时间、路径、文件管理、存储对象
- 详解Python中contextlib上下文管理模块的用法
- Python的对象协议
- python面对对象编程----------7:callable(类调用)与context(上下文)
- 没有上下文附加到服务的传入消息,并且当前操作未标有“CanCreateInstance = true”。若要与此服务通信,请检查传入绑定是否支持上下文协议并已初始化了有效的上下文。
- 【Python】上下文管理 with...as...