[Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)

Nick Coghlan ncoghlan at gmail.com
Wed Apr 19 15:10:55 CEST 2006


Nick Coghlan wrote:
> The second occurrence of "context manager" is meant to say "context":
> 
>      This PEP proposes that the protocol used by the with statement be
>      known as the "context management protocol", and that objects that
>      implement that protocol be known as "context managers". The term
>      "context" then encompasses all objects with a __context__()
>      method that returns a context object.
> 
> And the parenthetical comment was completely backwards and should have read:
> 
>    (This means that all context managers are contexts, but not all contexts are
>     context managers).
> 
> The reason for recommending that context managers should be contexts is 
> similar to the reason that iterators should be iterables - so that doing the 
> __context__() call manually will still give you something that can be used in 
> a with statement.

Ah, all is explained by svn blame, with a little help from svn log.

When Phillip went through to make the terminology consistent he actually 
swapped the meanings of "context" (which meant 'has a __context__ method' in 
the original PEP) and "context manager" (which meant 'has __enter__ and 
__exit__ methods and a __context__ method that returns self' in the original PEP).

I clearly wasn't paying attention when that diff went past on the checkins 
list, but I'd humbly request that we change it back :)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-Dev mailing list