我们知道在操作文件对象的时候可以这么写
1 2
|
with open('a.txt') as f: '代码块'
|
上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明enter和exit方法
使用举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
import shelve
class (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'))
|
输出
1 2 3
|
enter {'a': 1, 'b': 2} exit
|
近期评论