سؤال

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
هل كانت مفيدة؟

المحلول

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 the as 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top