Assuming that you need to access the context manager created in the with statement, __enter__ needs to return self. If you don’t need to access it, __enter__ can return whatever you would like.
The with statement will bind this method’s return value to the target(s) specified in the as clause of the statement, if any.
This will work.
class TestContext(object):
test_count=1
def __init__(self):
self.test_number = TestContext.test_count
TestContext.test_count += 1
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
if exc_value == None:
print 'Test %d passed' % self.test_number
else:
print 'Test %d failed: %s' % (self.test_number, exc_value)
return True