Are decorators really that different from metaclasses...

Paul Morrow pm_mon at yahoo.com
Thu Aug 26 17:09:28 CEST 2004


Anthony Baxter wrote:
> On Thu, 26 Aug 2004 14:40:18 GMT, Arthur <ajsiegel at optonline.com> wrote:
> 
>>>IMO, to change it inside of a function def should be (but isn't) as easy
>>>as...
>>>
>>>  >>> def foo():
>>>  ...     """ I am foo """
>>>  ...     __doc__ = __doc__ + 'indeed'
>>>
>>>Paul
>>
>>Yes.  Not only do I follow, but I think we came to exactly the same
>>place, from very different directions, and coming from what I sense is
>>very different backgrounds.
>>
>>Its just that I don't think many others seem to find that as
>>interesting as I happen to.
> 
> 
> Not so much that, as running out of ways to restate myself. The
> proposed syntax above still requires magic handling of double-under
> variables in a function, and a new namespace. I can't see how you can
> think that this is a _good_ thing.

The function does *not* get a new namespace!  Let me stress this point a 
little further.  We would simply be moving __xxx__ variables *out of* 
the function's local variable namespace to where they belong, the 
namespace of the function itself --- /the same namespace that __doc__ 
lives in./

As such, the function *body* would have no more access to __doc__ than 
it does now.  Consider the following

   def foo():
      """ foo's docstring """
      __author__ = 'Paul Morrow'
      __version__ = '0.1'
      __features__ = memoized, synchronized
      # Above this line is the function's declaration section.
      # Below this line is where the function's body starts.
      var1 = 10
      print __doc__          # error!  __doc__ is not in local namespace
      print var1             # ok.


Paul




More information about the Python-list mailing list