魔术方法2-上下文管理
目录
上下文管理对象
1. __enter__
2.__exit__
3. __enter__方法和__exit__方法的参数
上下文管理应用
上下文管理对象
当一个对象同时实现了__enter__()和__exit__()方法,它就属于上下文管理的对象
1. __enter__
进入与此对象相关的上下文。如果存在该方法,with语法会把该方法的返回值作为绑定到as子句中指定的变量上
2.__exit__
退出与此对象相关的上下文
class Test:def __init__(self):print("init")def __enter__(self):print("enter")def __exit__(self, exc_type, exc_val, exc_tb):print("exit")with Test() as f:print("test")
说明:
- 实例化对象的时候,并不会调用__enter__,进入with语句块调用__enter__方法,然后执行语句体。最后离开with语句块的时候,调用 __exit__ 方法
- __enter__ 方法返回值就是上下文中使用的对象,with语法会把它的返回值赋给as子句的变量。
class Test:def __init__(self):print("init")def __enter__(self):print("enter")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("exit")
T = Test()
with T as f:print(T == f)print("test")
注:with可以开启一个上下文运行环境,在执行前做一些准备工作,执行后做一些收尾工作
3. __enter__方法和__exit__方法的参数
__enter__方法没有其他参数
__exit__方法有3个参数
__exit__ (self,exc_type, exc_value,traceback)这三个参数都与异常有关。
如果该上下文退出时没有异常,这3个参数都为None。如果有异常,参数意义如下:
exc_type,异常类型
exc_value,异常的值
traceback,异常的追踪信息
__exit__方法返回一个等效True的值,则压制异常;否则,继续抛出异常
class Test:def __init__(self):print("init")def __enter__(self):print("enter")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print(exc_type)print(exc_val)print(exc_tb)print("exit")return "exit test"
T = Test()
with T as f:raise Exception('test error')print("test")print("end")
上下文管理应用
- 增强功能:在代码执行的前后增加代码,以增强其功能。
- 资源管理:类似装饰器的功能。打开了资源需要关闭,例如文件对象、网络连接、数据库连接等
- 权限验证:在执行代码之前,做权限的验证,在__enter__中处理
魔术方法2-上下文管理相关推荐
- 视频教程-Python--面向对象及魔术方法精讲视频-Python
Python--面向对象及魔术方法精讲视频 普华永道技术主管 / MongoDB Professionor 中国15位获得者之一 / 平安集团mongoDB特邀讲师 / mongoDB上海分会主席.中 ...
- python 面向对象编程 之 上下文管理协议
with open('path', 'r' ,encoding='utf-8') as f: 代码块 上述就叫做上线文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ...
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...
- Python with上下文管理及自定义上下文管理
Python with上下文管理及自定义上下文管理 一.上下文管理器 上下文管理器是对Context Manager的翻译 ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的 ...
- python 计时器_Python上下文管理器的魔力
点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...
- Python上下文管理器的魔力
点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...
- Python学习之---open操作+buffering缓冲区+上下文管理+StringIO和BytesIO
文件操作 文件操作对编程语言的重要性不用多说,如果数据不能持久保存,信息技术也就失去了意义. 1.1 ,open 操作 open(file, # 文件名mode='r', #默认为只读模式buffer ...
- python3高级语法:__slots__属性、property装饰器、上下文管理协议、__new__方法
#practice29:派生内置不可变类型并修改其实例化行为(以tuple为例) __new__() is intended mainly to allow subclasses of immutab ...
- python语言使用什么语句实现上下文管理协议_Python with语句上下文管理器两种实现方法分析...
本文实例讲述了Python with语句上下文管理器.分享给大家供大家参考,具体如下: 在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后, ...
最新文章
- demo15 AlertDialog
- WindML相关知识和图形设备驱动程序开发(一)
- 爬虫--用python中requests和urllib模块爬取图片
- yii2_getDb()自动切换数据库
- 聚类(part2)--经典聚类算法
- Linux篇 | 多网卡绑定技术 binding 和 网络组nmcli
- git版本回退:error: Your local changes to the following files would be overwritten by merge
- aardio中获取网络图片经GDI处理后保存到本地
- ubuntu mysql 内存满了_Ubuntu 下 mysql 卸载后重安装时遇到的问题
- PyTorch载入图片ToTensor,PIL和OpenCV读取图片plt.imread和PIL.Image.open
- paip.模块化设计中常用属性与常用方法
- NMEA0183协议中的GGA语句解析
- Powerbuilder webform,webservices 倍力文档在线查看
- 南通市城管局推动“数字化城管”向“智慧城管”升级
- js实现图片在一个div中点击按钮放大缩小效果
- QuickTime Player安装Soundflower插件实现完整录屏功能
- Eigen学习总结1
- 周边pd是什么意思_饭圈说的pd意思 饭圈pb是什么意思的缩写
- python代码书写_如何优雅的书写Python代码, python使用小技巧
- 骚操作之rsync下行同步+lnotify实时同步详解
热门文章
- Googlplay 应用发布(上架)流程,有图有现场
- 熵(Entropy) 条件熵 (Conditional Entropy) 相对熵(Relative Entropy)- 学习笔记
- 笔记【Redis数据结构、常用命令、key淘汰及持久化策略】
- mysql 查询所有表以及对应的信息
- 论文解读TransFG: A Transformer Architecture for Fine-grained Recognition
- python 网关控制家居_Python竟然可以做智能家居温湿度报警系统!赶紧给自己寝室做一个...
- 什么是 “私域流量”和“公域流量”?
- h3c防火墙配置基础
- 微信也能设置彩色昵称,你知道吗?
- 部署vue项目到阿里云服务器