版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《室内设计空间组织》课件
- 《电源系统的建模》课件
- 《病理心理学》课件
- 通史版2025届高考历史二轮总复习第二编考前突破突破一史学入门与史料研读课件
- 大学生网络安全教育
- 单位管理制度集合大合集人员管理十篇
- 单位管理制度合并选集【职员管理篇】十篇
- 单位管理制度分享汇编职员管理篇
- 单位管理制度分享大全职工管理
- 单位管理制度范例选集职工管理篇十篇
- 部编新人教版小学语文6六年级上册(全册)教案设计
- 山东省济南市2023-2024学年高二年级上册1月期末英语试题(解析版)
- 初中体育教案【完整版】七年级
- 2024-2030年中国城市供热行业市场前景预测及发展趋势预判报告
- 2024年计算机二级MS Office考试题库500题(含答案)
- 人教版七年级上册《生物》期末试卷(完整)
- 福建中考英语作文15分评分标准
- 智慧磐石工程建设方案
- 等保2完整版本.0介绍及建设流程
- 苏教版科学六年级上册期末测试卷含完整答案(各地真题)
- 市场法评估企业价值
评论
0/150
提交评论