`

上下文管理器Context Manager实现原理

 
阅读更多
python中用with关键字可以创建一个上下文管理器,其为我们带来了很多便利,比如常见的文件的打开关闭操作等,是否觉得它用起来很酷?想不想定义自己的上下文管理器?现在就让我们一起来瞧瞧它的底层实现。

其实要定义自己的上下文管理器也很简单,只需要实现两个方法:
1、__enter__(self)
2、__exit__(self, exc_type, exc_value, traceback)
其中__enter__()方法会在创建时调用,可以把它返回的对象绑定到as指定的变量上,而__exit__()方法则会在退出上下文管理器时调用,它的三个参数描述了退出时发生的异常,没有发生的话就为None。

实现思路就是这样,下面举一例,用以模拟文件的操作过程(注:本人用的是python 3.5):
#创建过程:
class FileSimulator:
    def __init__(self, filePath, mode='r'):
        self.filePath = filePath
        self.mode = mode

    def __enter__(self):
        print('--------opened %s---------\n' %self.filePath)
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        print('\n--------%s closed-------' %self.filePath)

    def read(self):
        print('content content content...')

    def write(self, strToWrite):
        print('write-->%s' %strToWrite)

#调用过程:
with FileSimulator(r'/home/python/test.py') as fd:
    fd.read()
    fd.write('just try it!')



#输出结果:
--------opened /home/python/test.py---------
content content content...
write-->just try it!
--------/home/python/test.py closed-------


为了简单一些,在此我没有定义打开模式,不过根据结果可看出,确实是先调用了__enter__()方法,最后退出时调用了__exit__()方法,可见我们的目的已经达到!
分享到:
评论

相关推荐

    python上下文管理器详细教程.docx

    本文将深入探讨 Python 上下文管理器的工作原理,以及如何通过 with 语句来实现资源的优雅管理。 ### 上下文管理器的工作原理 在 Python 中,上下文管理器的核心在于管理资源的生命周期。资源的生命周期包括创建...

    16.上下文管理器1

    在Python编程中,上下文管理器(Context Manager)是一种用于处理资源获取与释放的机制,特别是在需要进行一些初始化和清理工作的场景下。上下文管理器通过`with`语句实现,使得代码更加简洁且易于理解,同时确保了...

    Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析

    主要介绍了Python上下文管理器类和上下文管理器装饰器contextmanager用法,结合实例形式分析了上下文管理器类定义、使用、sqlalchemy实现数据库的自动提交和回滚相关操作技巧,需要的朋友可以参考下

    Python with语句上下文管理器两种实现方法分析

    对于这种情况python提供了上下文管理器(Context Manager)的概念,可以通过上下文管理器来定义/控制代码块执行前的准备动作,以及执行后的收尾动作。 一、为何使用上下文管理器 1、不使用上下文管理器的情况 通过...

    关于python的with语句使用with-as语句也有的人称为context manager

    `with`语句也被称为上下文管理器(Context Manager),因为它遵循了Python的上下文管理协议。 上下文管理协议是Python提供的一种接口,用于对象在进入和退出特定代码块时执行特定操作。这个协议要求对象实现两个...

    context-manager:管理模板的上下文

    上下文管理器 管理模板的上下文。使用安装npm i context-manager --save用法 var context = require ( 'context-manager' ) ;应用程序接口创建Context的实例。 添加上下文级别,可选择传递一个值作为开始。 name {...

    Python上下文管理器用法及实例解析

    在Python中,一个广泛使用的资源管理工具是上下文管理器(Context Manager),它通过提供一种便捷的方式来管理资源的分配和释放,即在代码执行前分配资源,在执行后释放资源,保证资源不会被泄漏。本文将介绍Python...

    Python基础技能之python中的上下文管理器和with语句的使用

    上下文管理实现机制上下文管理器实现 python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围。本文是针对于该功能的思考总结。 为什么需要上下文管理器? ...

    Python库 | oslo.context-2.22.1.tar.gz

    2. **上下文管理器(Context Manager)**:库中包含了上下文管理器,使得在with语句中可以方便地管理上下文的创建和销毁。这样可以确保在操作完成后正确清理资源,防止上下文泄露。 3. **线程局部存储(Thread ...

    Python深入学习之上下文管理器

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存)。它的语法形式是with…as… 关闭文件 ...

    Python中的上下文管理器和with语句的使用

    在Python编程中,上下文管理器(Context Manager)是一种特定的对象,它能提供一个环境,让代码块在执行时能够更安全地管理资源,如文件和数据库连接。上下文管理器通过实现`__enter__`和`__exit__`这两个方法来工作,...

    详解python with 上下文管理器

    在Python编程语言中,`with`关键字和上下文管理器(Context Manager)是处理资源获取与释放的重要机制,类似于Java中的try-with-resources特性。上下文管理器的主要作用是在代码块开始时初始化某个资源,并在代码块...

    Python库 | scope_injected_contextmanager-0.0.2.tar.gz

    让我们深入探讨一下这个库可能涉及的知识点以及Python中的上下文管理器(Context Manager)。 首先,我们要理解什么是Python的库。Python库是预先编写好的代码集合,开发者可以导入并使用这些库来加速开发进程,而...

    资源管理器上下文菜单管理器

    资源管理器上下文菜单管理器是一种实用工具,主要用于管理和自定义Windows操作系统中的资源管理器(文件浏览器)右键点击时出现的上下文菜单。通过这个工具,开发者或高级用户可以轻松地添加、修改或移除与注册表...

    sweetp-service-project-context-manager:Sweetp 服务来管理项目上下文

    Sweetp 服务来管理项目上下文。用法您必须在名为sweetp的 ArangoDB 服务器中创建数据库或配置另一个数据库。配置通过命令行开关配置数据库,例如--dbConnection http://myotherhost:1234/sweetp-database 。 使用...

    ArcGIS Server 9.2帮助文档翻译(6)Adding a Custom Context Attribute

    这种灵活性可以通过自定义上下文属性来实现,它允许开发者在运行时动态地改变地图服务的行为。 #### 如何添加自定义上下文属性 1. **理解上下文属性**:在ArcGIS Server中,上下文属性是指一组可以在运行时被服务...

    分布式集群Session共享 简单多tomcat8+redis的session共享实现

    `context.xml`文件是Tomcat配置的一部分,它定义了每个Web应用的上下文环境。在这个场景下,我们需要在`context.xml`中配置一个名为`Manager`的元素,指定使用`Tomcat-Redis-Session-Manager`。这个Manager实现了`...

    circleci-context-secret-manager:全面管理CircleCI机密(环境变量)的工具

    CircleCI上下文秘密管理器一种将CircleCI上下文机密(环境变量)作为幂等配置进行管理的工具。特征扩展-您可以使用覆盖将一个上下文秘密建立在另一个(或许多其他)上下文秘密的基础上。 随时准确了解您的所有秘密。...

    1-精进的Python语法.pdf

    **上下文管理器(Context Manager)** 1. **上下文管理器** 是Python中用于处理资源获取和释放的一种机制,它确保了在程序执行过程中,某些特定的状态(如文件操作、数据库连接等)能得到正确地初始化和清理,即使...

    《Python进阶》.pdf

    21. 上下文管理器 Context Manager: * 上下文管理器是一种语法结构,用于管理资源 * 上下文管理器可以使用 with 语句来实现 这些知识点涵盖了Python进阶的多个方面,包括函数、对象、可迭代对象、装饰器、异常、...

Global site tag (gtag.js) - Google Analytics