[Python-Dev] PEP 343: confusing context terminology

Phillip J. Eby pje at telecommunity.com
Tue Apr 18 17:59:17 CEST 2006


At 10:04 AM 4/18/2006 -0400, A.M. Kuchling wrote:
>PEP 343 says:
>
>     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 manager (this means that all context managers
>     are contexts, but not all contexts are context managers).
>
>I read this paragraph as meaning:
>
>     context = 'thing with __context__()'
>     context manager = 'thing returned by __context__()'
>
>So in a 'with' statement:
>
>with A as B:
>     ...
>
>A is a context; the context manager is internal and unavailable.

I believe this is backwards.  But then again, I would think that, since I 
wrote the documentation that takes the opposite tack.  :)

Partly, that's because I agree with your intuition about long-livedness of 
"manager", but mostly it's because the PEP is where the "contextmanager" 
decorator originated, and because it doesn't make any sense to call the 
method __context__() if it returns a context *manager*.  :)



>         1) Am I misunderstanding the PEP?  Is
>            'context = 'thing with __context__()' really the PEP's
>            meaning?
>
>         2) If the answer to 1) is 'yes', can we change the PEP?
>
>            My intuition is that a 'manager' keeps track of multiple
>            entities being managed; to have a single 'context' produce
>            multiple 'context managers' over time seems exactly
>            backwards.
>
>            I think I understand the logic behind the name -- that the
>            context manager *manages* the entry to and exit from the
>            block -- but think 'Manager' is the wrong term for this
>            because the object is really encapsulating a
>            procedure/algorithm, not managing a set of objects.  The
>            closest GoF pattern name might be 'Strategy', which is
>            still a bit of a stretch.

I think we should correct the PEP.



More information about the Python-Dev mailing list