Python之面向对象上下文管理协议
Python之面向对象上下文管理协议
析构函数:
import time
class Open:
def __init__(self,filepath,mode='r',encode='utf-8'):
self.f=open(filepath,mode=mode,encoding=encode) def write(self):
pass def __getattr__(self, item):
return getattr(self.f,item) def __del__(self):
print('----->del')
self.f.close() f=Open('a.txt','w')
f1=f
del f print('=========>')
上下文管理协议:
 # with open('a.txt','r') as f:
 #     print('--=---->')
 #     print(f.read())
 # with open('a.txt', 'r'):
 #     print('--=---->')
 #
 class Foo:
     def __enter__(self):
         print('=======================》enter')
         return 111111111111111
     def __exit__(self, exc_type, exc_val, exc_tb):
         print('exit')
         print('exc_type',exc_type)
         print('exc_val',exc_val)
         print('exc_tb',exc_tb)
         return True
 # with Foo(): #res=Foo().__enter__()
 #     pass
 with Foo() as obj: #res=Foo().__enter__() #obj=res
     print('with foo的自代码块',obj)
     raise NameError('名字没有定义')
     print('************************************')
 print('')
# import time
# class Open:
# def __init__(self,filepath,mode='r',encode='utf-8'):
# self.f=open(filepath,mode=mode,encoding=encode) # def write(self,line):
# self.f.write(line) # def __getattr__(self, item):
# return getattr(self.f,item) # def __del__(self):
# print('----->del')
# self.f.close() # def __enter__(self):
# return self.f
# def __exit__(self, exc_type, exc_val, exc_tb):
# self.f.close() # with Open('George'.txt','w') as f:
# f.write('Georgetest\n')
# f.write('Georgetest\n')
# f.write('Georgetest\n')
# f.write('Georgetest\n')
# f.write('Georgetest\n') class Open:
def __init__(self,filepath,mode,encode='utf-8'):
self.f=open(filepath,mode=mode,encoding=encode)
self.filepath=filepath
self.mode=mode
self.encoding=encode def write(self,line):
print('write')
self.f.write(line) def __getattr__(self, item):
return getattr(self.f,item) def __enter__(self):
return self def __exit__(self, exc_type, exc_val, exc_tb):
self.f.close()
return True with Open('aaaaa.txt','w') as write_file: #write_file=Open('aaaaa.txt','w')
write_file.write('123123123123123\n')
write_file.write('123123123123123\n')
print(sssssssssssssss)
write_file.write('123123123123123\n')
Python之面向对象上下文管理协议的更多相关文章
- python 描述符 上下文管理协议 类装饰器 property metaclass
		1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分py ... 
- python基础----实现上下文管理协议__enter__和__exit__
		我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明_ ... 
- Python系列之 - 上下文管理协议
		with obj as f: '代码块' 1.with obj ---->触发obj.__enter__(),拿到返回值 2.as f----->f=返回值. 3.with obj as ... 
- python 面向对象编程 之 上下文管理协议
		with open('path', 'r' ,encoding='utf-8') as f: 代码块 上述就叫做上线文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ... 
- Python上下文管理协议:__enter__和__exit__
		上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ... 
- Python  上下文管理协议中的__enter__和__exit__基本理解
		所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ... 
- 用python优雅打开文件及上下文管理协议
		有次面试被问到如何优雅地打开一个文件? 那就是用with语句,调用过后可以自动关闭. 但是为什么使用with语句就可以自动关闭呢,原因就是上下文管理协议. 上下文管理协议:包含方法 __e ... 
- python - 上下文管理协议(with + __enter__ + __exit__)
		上下文管理协议: with + __enter__ + __exit__ #上下问管理协议: #with + __enter__ + __exit__ class Test(): def __init ... 
- Python概念-上下文管理协议中的__enter__和__exit__
		所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ... 
随机推荐
- 爬虫—Requests高级用法
			Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requests files = { ... 
- 初学Linux应该注意的事项
			相比于windows linux严格区分大小写 linux所有内容都是以文件形式保存 linux不靠扩展名区分文件类型(靠权限),linux下文件扩展名主要是方便管理员分类 linux所有的存储设备都 ... 
- python爬虫BeautifulSoup库class_
			因为class是python的关键字,所以在写过滤的时候,应该是这样写: r = requests.get(web_url, headers=headers) # 向目标url地址发送get请求,返回 ... 
- [SRM625 Div1 Hard] Seatfriends
			题目链接:Portal Vjudge Solution 一开始拿到这一题Sb了,把空放到dp中一起考虑了,这样计数就变得很麻烦. 其实我们可以把空位拿出来,假设它是存在的,最后再放回去. 那么就可以钦 ... 
- 题解报告:hdu 4704 Sum(扩展欧拉定理)
			Problem Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input ... 
- RHEL5.6环境下Oracle10g单主机安装步骤记录
			操作环境:RedHat Enterprise Linux 5.6 安装版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64 ... 
- 选择排序                                                    分类:            算法             c/c++             2014-10-10 20:32    509人阅读    评论(0)    收藏
			选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ... 
- iOS生成PDF的关键代码-备忘
			//此方法只是把当前页面的内容生成PDF并保存在沙盒中. //还需要做:把当前面没有显示的内容以分页的形式生成PDF,并把PDF读取并显示出来 //关于显示可以参考:念茜的博客 iOS开发笔记——PD ... 
- 转  Dockerfile 常用指令 - 每天5分钟玩转 Docker 容器技术(16)
			是时候系统学习 Dockerfile 了. 下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档. FROM指定 base 镜像. MAINTAINER设置镜像的作者,可以是 ... 
- overlaps the location of another project Zendstudio导入已经存在的目录
			转 http://blog.csdn.net/kdchxue/article/details/50633745 最近弄zendstuido导入已经存在的项目,找了很多地方终于找到了导入的方法,特别记录 ... 
