Was macht functools.wraps?
functools.wraps
ist ein Dekorator, der verwendet werden kann, um eine Funktion oder Methode durch Aktualisierung ihrer Metadaten zu modifizieren. Es wird in der Regel in Kombination mit anderen Dekoratoren verwendet, um die Metadaten der dekorierten Funktion zu erhalten. Hier ist ein Beispiel dafür, wie man functools.wraps
verwendet, um eine Funktion zu dekorieren:
import functools
def my_decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwds):
print("Calling decorated function")
return f(*args, **kwds)
return wrapper
@my_decorator
def example():
"""Docstring"""
print("Called example function")
print(example.__name__) #example
print(example.__doc__) #Docstring
Hier nimmt functools.wraps
die Funktion f
als Eingabe und kopiert deren Attribute wie __name__
, __doc__
auf die Wrapper-Funktion. Dies ist nützlich, da in dem Beispiel die dekorierte Funktion example
in der wrapper
-Funktion eingeschlossen wird und die Wrapper-Funktion die Attribute der ursprünglichen Funktion haben wird.