自定义上下文管理器
在开发中可以根据实际情况设计自定义上下文管理器,只需要让定义的类支持上下文管理协议,并实现__enter__()`与
exit()``方法即可。
接下来,构建自定义的上下文管理器,示例如下:
class OpenOperation:
def __init__(self, path, mode):
# 记录要操作的文件路径和模式
self.__path = path
self.__mode = mode
def __enter__(self):
print('代码执行到__enter__')
self.__handle = open(self.__path, self.__mode)
return self.__handle
def __exit__(self, exc_type, exc_val, exc_tb):
print("代码执行到__exit__")
self.__handle.close()
with OpenOperation('自定义上下文管理.txt', 'a+') as file:
# 创建写入文件
file.write("Custom Context Manage")
print("文件写入成功")
上述代码自定义了上下文管理器OpenOperation类,在该类中__enter__()
方法中用于打开文件,__exit__()
方法用于关闭文件。
运行程序,结果如下所示:
代码执行到__enter__
文件写入成功
代码执行到__exit__
从输出结果中可以看出,使用with语句生成上下文管理器之后,程序先调用了__enter__()
方法,其次执行该方法中的语句体,然后执行with语句块中的代码,最后在文件写入完成之后执行__exit__()
方法关闭资源。