版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Python开发技术应用》61上下文管理上下文管理器上下文管理器,是一个包装其他代码的对象,用于处理那些事先需要设置,事后需要做清理工作的事务。使用上下文管理器最多的场景是文件对象。在使用文件对象时,最简陋的做法是这样的:f=open("/tmp/test.txt")f.write('程序日志:测试1\n') #假设这就是要做的全部工作f.close()上下文管理器如果忘记调用file.close()方法,会存在两个问题:如果在程序运行结束之前发生蓝屏、断电等情况,已经写入但暂未缓冲的数据会丢失。在程序运行结束之前,打开的文件会被占用,其他程序或用户将无法修改、移动或删除这个文件。现在给这些代码加上finally语句:f=open("/tmp/test.txt")try:f.write('程序日志:测试1\n') #假设这就是要做的全部工作finally:f.close()这段代码可以改写为:withopen("/tmp/foo.txt")asf:
f.write('程序日志:测试1\n')上下文管理器使用with语句打开文件,把相关工作放在其下的语句块中,当语句块结束的时候,会自动完成清理工作,相当于添加了一套finally子句。这就是上下文管理器。支持上下文管理的对象文件对象之所以能够使用上下文管理器,是因为文件类型实现了__enter__()和__exit__()两个特殊的方法。其中__enter__()是在进入上下文管理器的时候自动调用,__exit__()是在退出上下文管理器时自动调用。withopen("/tmp/foo.txt")asf:
f.write('程序日志:测试1\n')#后续代码...支持上下文管理的对象隐性调用了f.__enter__()隐性调用了f.__exit__()案例:设计一个代表平面坐标点的类Point,支持上下文管理为了方便计算平面坐标距离,设计一个Point类,其功能如下:要求实现运算符重载(魔术)方法__sub__(),用于两个Point对象直接用减法运算符(-)进行运算,得到坐标间的距离;要求实现__str__()方法,用于在print()函数进行打印时显示坐标值;要求实现__enter__()和__exit__()两个方法用于支持上下文管理器。支持上下文管理的对象A(4,5)AxAyYXOByBxB(-3,3)|AB|...A=Point(4,5)B=Point(-3,3)distance=A-B#要求Point类支持减法print(distance)执行结果:7.280109889280518支持上下文管理的对象123456789101112131415161718192021222324252627classPoint:def__init__(self,x,y):self.x,self.y=x,ydef__sub__(self,other):#实现此方法可以支持减法运算
ifother.__class__==self.__class__:return((self.x-other.x)**2+(self.y-other.y)**2)**0.5else:#如果不是同类型的Point对象相减,抛出ValueError异常
raiseTypeError("incorrectcoordinateparametertype")def__str__(self):returnf"Point({self.x},{self.y})"def__enter__(self):#此方法在进入with语句时自动调用
print(f'{self.y}进入上下文管理器')
returnself#必须将当前对象返回给上下文管理器
def__exit__(self,exc_type,exc_val,exc_tb):#此方法在离开with语句时自动调用
print(f'{self.y}离开上下文管理器,完成清理工作')A=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某单位临时用工合同书(范本)
- 【人教版2019必修第一册】高一物理5共点力的平衡(教学设计)教案
- 平江县2027届三上数学期末统考模拟试题含解析
- 2027届铁岭市数学六上期末复习检测模拟试题含解析
- 洁具购销合同(范本)
- 2027届甘肃省酒泉市金塔县四上数学期末预测试题含解析
- 信阳市师河区2027届数学六上期末考试模拟试题含解析
- 2027届铜仁地区印江土家族苗族自治县六上数学期末检测模拟试题含解析
- 贞丰县2027届数学六年级第一学期期末学业水平测试试题含解析
- 初中九年级物理上册期末试卷(审定版)
- 2026海南农村商业银行招聘1人(202607)笔试备考试题及答案详解
- 工程结算中工程款抵房款审批流程
- 屠格涅夫猎人笔记的语言艺术特色
- 辅警留置看护考试综合知识题库
- 中央空调冷凝水管道改造技术方案
- 无人机测绘操控员职业技能等级认定考试复习题库(附答案)
- 重庆交通开投集团招聘笔试题库2026
- 120个文言实词趣记
- 宁夏回族自治区银川市永宁中学2025-2026学年第二学期第一次阶段检测高一物理试卷(含解析)
- 专职安全员考勤制度
- 非计划停机考核制度
评论
0/150
提交评论