Kürzlich lerne ich Python Decorator und die Verwendung von functools.wraps
.wie __name__ ändern in python dekorator
def a():
def b():
def c():
print('hello')
return c
return b
print a.__name__
#output:a
Ich verstehe, warum die Ausgabe a.But Ich weiß nicht, wie __name__
Änderung in dem folgenden Code.
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log('...')
def simple():
print('*' * 20)
print simple.__name__
#output:wrapper
Warum ist die Ausgabe "Wrapper" und nicht "Dekorateur" oder "Log"?
Vielleicht nicht so verwandt, aber Sie sollten einen Blick auf haben [Was bedeutet' functools.wraps' tun ?] (http://stackoverflow.com/questions/308999/what-does-functools-wraps-do) –
Wissen Sie, wie Dekoratoren intern funktionieren? Das Umschreiben ohne syntaktischen Zucker hilft viel dabei zu verstehen, was hier passiert. –