Python的`with`语句目标意外地为None。

13

看起来我对Python的with语句还不太理解。

考虑下面这个类:

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

现在,当在with中使用它时,就像这样

with test() as michael:
    print repr(michael)
我希望获得一些类似于<test instance at memore blah>的输出。但我得到了None
这里出了什么问题?任何建议都会有所帮助。
(我使用Python 2.6.6。)
编辑:
感谢ephement指引我查看文档。 __enter__方法应该这样写。
    def __enter__(self): return self
3个回答

19

来自with语句文档:

如果在with语句中指定了目标,那么__enter__()方法的返回值将被赋值给它。

如果你实现了def __enter__(self): return self,那么你将获得期望的输出结果。


2

来自文档

object.__enter__(self)

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


-1

对于repr(michael),我得到了同样的结果。

尝试使用这个:

m.__repr__()

我不是完全确定,但我认为这与您没有在test类中定义repr方法有关。


不是,使用的是 object.__repr__ - Prestel Nué

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接