python's `with` statement target is unexpectedly None
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.
Somethin开发者_Go百科g 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
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.
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 theas
clause of the statement, if any.
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
精彩评论