Pythonのwithステートメント

匿名の方にコメントをもらった。
pythonのwithステートメントでは as の後ろに書いた変数には__enter__の戻り値が入ってくるそうだ。
ならこれでOK??

# -*- coding:utf-8 -*-
from __future__ import with_statement
import sys

class Cls:
    def __init__(self,data):
        self.data = data
        
    def __enter__(self):
        print "_enter_"
        return self
    
    def __exit__(self,type,value,traceback):
        print "__exit__\ntype:%s\ntype:%s\ntraceback:%s" % (type,value,traceback)
        return True

    def disp(self):
        print self.data

with Cls("あいうえお") as o:
    o.disp()

で、実行結果はこれ。

>>> _enter_
あいうえお
__exit__
type:None
type:None
traceback:None
>>>

おお。うまくいった。