我们知道在操作文件对象的时候可以这么写

with open('a.txt') as f:
  '代码块'

上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__和__exit__方法

使用举例

import shelve

class ShelveUtil(object):
"""
使用Shelve存储提取对象
""" def __init__(self, file):
self.file_name = file def save(self, key, value):
"""
存储对象
:param key:
:param value:
:return:
"""
self.file_obj[key] = value def load(self, key):
"""
获得对象
:param key:
:return:
"""
return self.file_obj[key] def load_keys(self):
"""
返回所有key
:return:
"""
return list(self.file_obj.keys()) def del_obj(self, key):
"""
删除object
:return:
"""
del self.file_obj[key] def __enter__(self):
print("enter")
self.file_obj = shelve.open(self.file_name)
return self def __exit__(self, exc_type, exc_val, exc_tb):
print("exit")
self.file_obj.close()
return True if __name__ == '__main__': a = {'a': 1, 'b': 2} with ShelveUtil('a.db') as s:
s.save('a', a)
print(s.load('a'))

输出

enter
{'a': 1, 'b': 2}
exit

  

最新文章

  1. Linux从零单排(一):Google Chrome的安装
  2. NOSQL 数据库 CodernityDB
  3. 关于HTML面试题汇总
  4. FingerprintJS - 在浏览器端实现指纹识别
  5. js实现点击<li>标签弹出其索引值
  6. hibernate一对多注解
  7. jsp弹出Please check the location and try again!对话框
  8. ASP.NET中application对象
  9. 深入浅出 Java Concurrency (3): 原子操作 part 2
  10. Spring EnableWebMvc vs WebMvcConfigurationSupport
  11. 初识MongoBD
  12. <转> plsql dev中Dynamic Performance Tables not accessible分析解决
  13. firefox一搜索就提示是否进入***网站和取消占地方的标题栏
  14. Structs复习 OGNL
  15. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译
  16. 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解
  17. Runtime - Associated Objects (关联对象) 的实现原理
  18. Spring学习(五)——集成MyBatis
  19. luogu P1549 棋盘问题(2) 题解
  20. MVC错误(一)

热门文章

  1. ORACLE rollup函数
  2. Educational Codeforces Round 54 E. Vasya and a Tree(树上差分数组)
  3. myeclipse cannot connect to vm
  4. Oracle修改数据库的日期
  5. UVaLive 3704 Cellular Automaton (循环矩阵 + 矩阵快速幂)
  6. 20155205 信息安全技术第二次实验 Windows口令破解
  7. How to fix "FAILURE DURING CONVERSION TO COFF: FILE INVALID OR CORRUPT"
  8. CentOS FTP服务器系统套件全面讲解
  9. 去除html页面中GET《 http://localhost:8080/favicon.ico 404 (Not Found)》
  10. Android多线程操作sqlite(Sqlite解决database locked问题)(2)使用事务处理的效果