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

Nick Coghlan ncoghlan at gmail.com
Wed Apr 19 15:41:43 CEST 2006


A.M. Kuchling wrote:
> On Wed, Apr 19, 2006 at 11:10:55PM +1000, Nick Coghlan wrote:
>> 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).
> 
> Yes, that was exactly what he set out to do.  I noted that the terms
> "context" and "context manager" seemed to be exactly reversed from
> what's intuitive, and from how the user-facing documentation is
> written; the post at
> <http://mail.python.org/pipermail/python-dev/2006-April/063842.html>
> contains my argument.  GvR approved, and Phillip went ahead and made
> the change.

I'm a little behind on python-dev *and* python-checkins, so I'd missed the 
first half of this discussion.

It'll take me a while to swap the two in my head, but I'll get used to it 
eventually. Phillip's point that calling __context__ should give you a context 
as the result is a good one, and "context manager" makes sense as "an object 
that can generate new contexts".

Given that naming though, I think contextlib.contextmanager should be renamed 
to contextlib.context. The current name was assigned when objects with all 3 
methods were the one's being called "context managers". With the terms being 
swapped, the name of the decorator should probably change, too. Chopping 7 
characters off the name doesn't hurt, either :)

Cheers,
Nick.

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


More information about the Python-Dev mailing list