Ten dekorator udostępnia nazwę metody w funkcji, przekazując ją jako argument słowa kluczowego.
from functools import wraps
def pass_func_name(func):
"Name of decorated function will be passed as keyword arg _func_name"
@wraps(func)
def _pass_name(*args, **kwds):
kwds['_func_name'] = func.func_name
return func(*args, **kwds)
return _pass_name
będzie go używać w ten sposób:
@pass_func_name
def sum(a, b, _func_name):
print "running function %s" % _func_name
return a + b
print sum(2, 4)
Ale może tylko chcesz napisać co chcesz bezpośrednio wewnątrz samego dekoratora. Następnie kod jest przykładem sposobu na uzyskanie nazwy funkcji w dekoratorze. Jeśli podasz więcej szczegółów na temat tego, co chcesz zrobić w funkcji, która wymaga nazwy, może mogę zasugerować coś innego.
możliwy duplikat [Jak uzyskać nazwę funkcji jako ciąg w języku Python?] (Http://stackoverflow.com/questions/251464/how-to-get-the-function-name-as- string-in- python) – DarenW
@DarenW Nie jest. Żądanie nazwy funkcji ze zmiennej zawierającej obiekt funkcji i żądanie nazwy funkcji od wewnątrz to dwa bardzo różne pytania. –