recursive decorator

Michele Simionato michele.simionato at gmail.com
Sat Sep 5 00:25:07 EDT 2009


On Sep 4, 7:03 pm, Ethan Furman <et... at stoneleaf.us> wrote:

> Just to verify, using the decorator module is portable, yes?

Yes, it is portable. BTW, here is what you want to do (requires
decorator-3.1.2):

from decorator import FunctionMaker

def bindfunc(f):
    name = f.__name__
    signature = ', '.join(FunctionMaker(f).args[1:]) # skip first arg
    return FunctionMaker.create(
        '%s(%s)' % (name,  signature),
        'return _func_(%s, %s)' % (name, signature),
        dict(_func_=f), defaults=f.func_defaults,
               doc=f.__doc__, module=f.__module__)

@bindfunc
def fac(self, n):
    return 1 if n <= 1 else n * self(n - 1)

print fac(5)
help(fac)



More information about the Python-list mailing list