python-with 上下文管理
一、什么是上下文管理器
1、如果一个类中实现了__enter__ 和__exit__方法 ,那么这个类就可以当作一个上下文管理器的类 。
2、这个类的对象即可以称之为上下文管理器 (可以通过with 去执行调用)
3、主要作用:用于资源的获取和释放,如文件操作,数据库连接,处理异常
with 语法:
表达式:
with object as var
block
上下文管理器: object (一个实现了 __enter__ 和__exit__方法 的类) ---object()实例化这个类的对象
上下文管理器返回的资源对象:var
上下文管理中其他要执行的语句块:block
二、代码例子
class MyContextManager(): def __enter__(self): print('访问资源') return self def __exit__(self, exc_type, exc_val, exc_tb): print('**********关闭资源**********') def otherFunc(self): print('其他内部实现的功能') def func(): print('外部的功能') print('*************进入 with 之前************') with MyContextManager() as f: print('进入with') # 上下文管理器对象 访问 其实例方法 f.otherFunc() # with 语句块内执行 外部的方法 func() print('离开with') print('*************with完成之后*************')
执行结果
*************进入 with 之前************
访问资源
进入with
其他内部实现的功能
外部的功能
离开with
**********关闭资源**********
*************with完成之后*************
从上面代码可以看到,分析with 语句 的执行过程
1、使用with 执行上下文管理器的时候 会首先调用这个管理器类的 __enter__方法,(当然如果这个上下文管理器的类 有__init__方法的时候,还是会先执行初始化方法的)
2、enter 返回这个上下文管理器对象 f
3、上下文管理器对象 f 调用 自己 内部的实例方法
4、执行 with语句中其他的外部方法或语句块
5、步骤4执行完毕后,执行上下文管理器对象中的exit 方法
类比于 文件读写的流程:
with open('1.txt','r') as f:
print(f.read())
由上面可得 open 内部 肯定也实现了 __enter__ 和__exit__方法
1、 with 内部 open('1.txt','r') 首先执行了 __enter__ 并返回了一个文件对象 f
2、文件对象 调用了 open 类 的实例方法 read
3、print 语句执行完毕后 调用__exit__方法 关闭这个文件对象

浙公网安备 33010602011771号