• 実装方法A

    1. __enter__メソッドを定義
    2. __exit__メソッドを定義
  • 実装方法B

    1. @contextlib.contextmanagerデコレータ付きのジェネレータを定義
class MyContextManager:
    # 必須
    def __enter__(self):
        print 1.enter
        return self

    # 必須
    def __exit__(self, exc_type, exc_value, traceback):
        print 4.exit

    # 自作メソッド
    def bar(self):
        print 3.bar

with MyContextManager() as cm:
    print 2.foo
    cm.bar()