欢迎光临散文网 会员登陆 & 注册

Context Manager 怎么理解?

2023-07-27 17:02 作者:Mr蓝珲  | 我要投稿

Context Manager 是 Python 中的一种类。


按照鸭子类型(Duck typing)的说法,一个类只要有了 __enter__() 与 __exit__() 方法,那么这个类就是妥妥的 Context Manager 类。


最高级的理解就是制造。下面的 Python 代码定义了一个不能干太多事情的类 SimpleClass, 这个类有且仅有两个方法,  __enter__() 与 __exit__()。 把这个类弄到 with block 中,检查 __enter__() 与 __exit__() 何时会被调用。


猜猜上面代码的输出是什么?(A) Hi Bye True Here (B)Hi Bye False Here  (C) Hi True Bye Here (D) True Hi Bye Here


倒数第二行的 isinstance() 用于检查 scm 对象是不是与抽象基类“鸡肋” AbstractContextManager 有关系。


其实,open() 函数的返回值也是个 Context Manager 对象。可以用下面的代码验证。你会发现, dir(f) 中包含了 __enter__() 与 __exit__() 方法。


使用 Context Manager 对象,让 __exit__() 方法自动做扫尾工作


Context Manager 怎么理解?的评论 (共 条)

分享到微博请遵守国家法律