Possible to change function name in definition?

attributes, function, python

Solution

The function body is not executed until you execute the function. You could use a decorator though:

def rename(newname):
    def decorator(f):
        f.__name__ = newname
        return f
    return decorator

And then use it like this:

@rename('new name')
def f():
    pass
print f.__name__

However, the function is still only reachable as `f`.

Problem

I tried several ways to change the function name in the definition, but they failed. ``` >>> def f(): pass >>> f.__name__ 'f' >>> def f(): f.__name__ = 'new name' >>> f.__name__ 'f' >>> def f(): self.__name__ = 'new name' >>> f.__name__ 'f' ``` But I can change the name attribute after defining it. ``` >>> def f(): pass >>> f.__name__ = 'new name' >>> f.__name__ 'new name' ``` Any way to change/set it in the definition (other than using a decorator)?

Original source