Context Manager 怎么理解?
Context Manager 是 Python 中的一種類。
按照鴨子類型(Duck typing)的說法,一個(gè)類只要有了 __enter__() 與 __exit__() 方法,那么這個(gè)類就是妥妥的 Context Manager 類。
最高級(jí)的理解就是制造。下面的 Python 代碼定義了一個(gè)不能干太多事情的類 SimpleClass, 這個(gè)類有且僅有兩個(gè)方法, ?__enter__() 與 __exit__()。 把這個(gè)類弄到 with block 中,檢查 __enter__() 與 __exit__() 何時(shí)會(huì)被調(diào)用。

倒數(shù)第二行的 isinstance() 用于檢查 scm 對(duì)象是不是與抽象基類“雞肋”?AbstractContextManager 有關(guān)系。
其實(shí),open() 函數(shù)的返回值也是個(gè) Context?Manager 對(duì)象??梢杂孟旅娴拇a驗(yàn)證。你會(huì)發(fā)現(xiàn), dir(f) 中包含了 __enter__() 與 __exit__() 方法。

標(biāo)簽:context manager