Are decorators really that different from metaclasses...

Jess Austin jess.austin at gmail.com
Thu Aug 26 18:20:10 EDT 2004


Paul Morrow <pm_mon at yahoo.com> wrote in message news:<mailman.2423.1093527121.5135.python-list at python.org>...
> Currently, you can change a doc string outside of a function, by 
> modifying the function's __doc__ attribute

[snip]

> 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'

I'm not trying to be mean, but why not use a class for this?  This is
the whole point of "self" - provide a persistent, updateable namespace
for an object.  (Note: explicit use of self in Python is a GOOD
THING!)  An object that needs such a namespace should be a class.  I'm
not sure why or how a function could use this anyway - why not just
set the docstring to " I am foo indeed" to start with?  If what you're
looking for is a "configured function", which contains some data (or
metadata) that is set at the beginning of the function's lifecycle, to
me that would be a closure, which could be written like this:

def closure_maker(postfix):
    def foo():
        """ I am foo """
        pass
    foo.__doc__ += postfix
    return foo

Or perhaps there is another application you had in mind, for which
this wouln't be sufficient?  Paul: I admit I'm a bit confused by your
wanting a function to have access to its metadata, because I could
have sworn that earlier in the thread you defined metadata as data
about an object that that object would never use itself.  I could be
thinking of someone else though...

later,
Jess



More information about the Python-list mailing list