python的`with`语句目标是意外的无

时间:2011-01-29 06:58:47

标签: python with-statement contextmanager as-keyword

似乎我对--- python with语句不了解。

考虑这个课程:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass

现在,与with一起使用时,就像在

中一样
with test() as michael:
    print repr(michael)

我希望有一些输出,例如<测试实例在memore blah> 。但我得到

这里有什么问题?任何建议都会有所帮助。

(我使用的是Python 2.6.6。)

修改

谢谢 ephement指的是文档。 __enter__方法应为

    def __enter__(self): return self

3 个答案:

答案 0 :(得分:18)

来自with文档:

  

如果目标包含在with语句中,则__enter__()的返回值将分配给它。

如果您def __enter__(self): return self,则会产生预期的输出。

答案 1 :(得分:2)

来自the docs

  

object.__enter__(self)

     

输入与此对象相关的运行时上下文。 with语句将此方法的返回值绑定到语句的as子句中指定的目标(如果有)。

答案 2 :(得分:-1)

我为repr(michael)

得到同样的东西

请改为尝试:

m.__repr__()

我不完全确定,但我认为这与您未在repr类中定义test方法的事实有关