目录

上下文管理对象

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-上下文管理相关推荐

  1. 视频教程-Python--面向对象及魔术方法精讲视频-Python

    Python--面向对象及魔术方法精讲视频 普华永道技术主管 / MongoDB Professionor 中国15位获得者之一 / 平安集团mongoDB特邀讲师 / mongoDB上海分会主席.中 ...

  2. python 面向对象编程 之 上下文管理协议

    with open('path', 'r' ,encoding='utf-8') as f: 代码块 上述就叫做上线文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ...

  3. 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...

    1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...

  4. Python with上下文管理及自定义上下文管理

    Python with上下文管理及自定义上下文管理 一.上下文管理器 上下文管理器是对Context Manager的翻译 ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的 ...

  5. python 计时器_Python上下文管理器的魔力

    点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...

  6. Python上下文管理器的魔力

    点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...

  7. Python学习之---open操作+buffering缓冲区+上下文管理+StringIO和BytesIO

    文件操作 文件操作对编程语言的重要性不用多说,如果数据不能持久保存,信息技术也就失去了意义. 1.1 ,open 操作 open(file, # 文件名mode='r', #默认为只读模式buffer ...

  8. python3高级语法:__slots__属性、property装饰器、上下文管理协议、__new__方法

    #practice29:派生内置不可变类型并修改其实例化行为(以tuple为例) __new__() is intended mainly to allow subclasses of immutab ...

  9. python语言使用什么语句实现上下文管理协议_Python with语句上下文管理器两种实现方法分析...

    本文实例讲述了Python with语句上下文管理器.分享给大家供大家参考,具体如下: 在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后, ...

最新文章

  1. demo15 AlertDialog
  2. WindML相关知识和图形设备驱动程序开发(一)
  3. 爬虫--用python中requests和urllib模块爬取图片
  4. yii2_getDb()自动切换数据库
  5. 聚类(part2)--经典聚类算法
  6. Linux篇 | 多网卡绑定技术 binding 和 网络组nmcli
  7. git版本回退:error: Your local changes to the following files would be overwritten by merge
  8. aardio中获取网络图片经GDI处理后保存到本地
  9. ubuntu mysql 内存满了_Ubuntu 下 mysql 卸载后重安装时遇到的问题
  10. PyTorch载入图片ToTensor,PIL和OpenCV读取图片plt.imread和PIL.Image.open
  11. paip.模块化设计中常用属性与常用方法
  12. NMEA0183协议中的GGA语句解析
  13. Powerbuilder webform,webservices 倍力文档在线查看
  14. 南通市城管局推动“数字化城管”向“智慧城管”升级
  15. js实现图片在一个div中点击按钮放大缩小效果
  16. QuickTime Player安装Soundflower插件实现完整录屏功能
  17. Eigen学习总结1
  18. 周边pd是什么意思_饭圈说的pd意思 饭圈pb是什么意思的缩写
  19. python代码书写_如何优雅的书写Python代码, python使用小技巧
  20. 骚操作之rsync下行同步+lnotify实时同步详解

热门文章

  1. Googlplay 应用发布(上架)流程,有图有现场
  2. 熵(Entropy) 条件熵 (Conditional Entropy) 相对熵(Relative Entropy)- 学习笔记
  3. 笔记【Redis数据结构、常用命令、key淘汰及持久化策略】
  4. mysql 查询所有表以及对应的信息
  5. 论文解读TransFG: A Transformer Architecture for Fine-grained Recognition
  6. python 网关控制家居_Python竟然可以做智能家居温湿度报警系统!赶紧给自己寝室做一个...
  7. 什么是 “私域流量”和“公域流量”?
  8. h3c防火墙配置基础
  9. 微信也能设置彩色昵称,你知道吗?
  10. 部署vue项目到阿里云服务器