当前位置:首页>python>Python入门(番外篇):上下文管理器

Python入门(番外篇):上下文管理器

  • 2026-09-02 20:28:55
Python入门(番外篇):上下文管理器

在Python中,上下文管理器是用魔术方法构建的类的一种,使用 with 关键字启动。这里,必须明确的是,with 仅仅是启动上下文的关键字,并以 as 关键字为启动的实例对象起别名,方便后续操作。

P1、定义支持上下文管理器的类

为了支持上下文管理,类定义时必须使用 __enter__() 、 __exit__() 两个魔术方法,它们分别负责上下文的进入和退出。通常,对文件、数据库、网络连接等操作都支持上下文管理。支持上下文管理器的类,结构如下:

    可以看到支持上下文管理器的类和普通类是一样定义的,仅仅是多了两个方法。

P2、with是启动上下文管理器的钥匙

有了支持上下文管理的类之后,我们需要用 with 关键字启动类,并用 as 将例化对象值赋给实关键字。 with 语句结构如下:

with 关键字启动了类实例化对象过程,并将对象赋值给 as 后的标识符。

P3、案例展示

如下,定义了一个支持上下文管理器的类:

class Count():    def __init__(self,n):        self.count = n    def __enter__(self):        print(f'Enter:{self.count}')        return self.count    def __exit__(self,exc_type, exc_value,traceback):        self.count = 0        print(f'Exit:{self.count}')        return None

上述定义了一个Count类。该类在初始化时,会给类属性count赋一个初始值。而如果通过with启动后,会直接通过入口print()打印当前的count值。执行完成后,将count重置为0,并print()打印。

现在,使用该上下文管理器类,且执行无异常。如下:

with Count(10) as c:    print(c-2)# 输出Enter:108Exit:0

再次使用该上下文管理器类,且执行有异常。如下:

with Count(10) as c:    print(c-2)    print(1/0)# 输出Enter:108Exit:0Traceback (most recent call last):  Cell In[256], line 4    print(1/0)ZeroDivisionError:division by zero

对比上述两端代码执行结果,可以看到支持上下文管理器的类在出错时,可以完整执行退出语句,从而保证该实例对象的正常退出,解决了异常退出时垃圾数据问题。

☆☆☆ End ☆☆☆转角  ·  遇见  ·  程序猿
-------------------------
那是一抹淡淡的微光

它是数字世界里的一把杀猪刀

却总能巧夺天工

它的世界是纯粹0、1组合

却总能创造无尽幻想

......

本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。

最新文章

随机文章