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

发布于 2024-10-15 04:04:49 字数 652 浏览 10 评论 0原文

似乎我不明白 python with 语句。

考虑这个类:

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

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

with test() as michael:
    print repr(michael)

我期望一些输出,如 。但我没有得到任何结果。

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

(我正在使用 Python 2.6.6。)

编辑:

感谢 ephemment 为我指明了文档。 __enter__ 方法应为

    def __enter__(self): return self

seems like I do not understand something with---the python with statement.

Consider this class:

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

now, when using it with with, like in

with test() as michael:
    print repr(michael)

I would expect some output like <test instance at memore blah>. But I get None.

Something wrong here? Any suggestions would help.

(I am using Python 2.6.6.)

EDIT:

Thanks to
ephement for pointing me to the documentation. The __enter__ method should read

    def __enter__(self): return self

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

指尖凝香 2024-10-22 04:04:49

来自 with 文档:

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

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

From the with documentation:

If a target was included in the with statement, the return value from __enter__() is assigned to it.

If you def __enter__(self): return self, then your expected output is produced.

单身情人 2024-10-22 04:04:49

来自文档

object.__enter__(self)

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

From the docs:

object.__enter__(self)

Enter the runtime context related to this object. The with statement will bind this method’s return value to the target(s) specified in the as clause of the statement, if any.

醉生梦死 2024-10-22 04:04:49

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

试试这个:

m.__repr__()

我不完全确定,但我认为这与您尚未定义 < test 类中的strong>repr 方法

I get the same thing for repr(michael)

Try this instead:

m.__repr__()

I'm not entirely sure, but I think it has something to do with the fact that you haven't defined the repr method in your test class

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文