Context Manager 怎么理解?
Context Manager 是 Python 中的一种类。
按照鸭子类型(Duck typing)的说法,一个类只要有了 __enter__() 与 __exit__() 方法,那么这个类就是妥妥的 Context Manager 类。
最高级的理解就是制造。下面的 Python 代码定义了一个不能干太多事情的类 SimpleClass, 这个类有且仅有两个方法, __enter__() 与 __exit__()。 把这个类弄到 with block 中,检查 __enter__() 与 __exit__() 何时会被调用。

倒数第二行的 isinstance() 用于检查 scm 对象是不是与抽象基类“鸡肋” AbstractContextManager 有关系。
其实,open() 函数的返回值也是个 Context Manager 对象。可以用下面的代码验证。你会发现, dir(f) 中包含了 __enter__() 与 __exit__() 方法。
