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)?
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
.
No. The closest you can come to this is defining a callable class with each instance having its __name__
set in the initializer.
The function body is not executed until you call the function, so there's no way you can use the function body to alter what happens at definition time. Why do you want to do this anyway? If you're writing the function and want it to have a different name, just define it with a different name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With