学科分类
目录
基础

自定义上下文管理器

在开发中可以根据实际情况设计自定义上下文管理器,只需要让定义的类支持上下文管理协议,并实现__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__()方法关闭资源。

点击此处
隐藏目录