Nach der Diskussion mit BrenBarn, behält heute functools.wraps
auch die Signatur der umgebrochenen Funktion bei. IMHO das macht die decorator
Dekorateur fast obsolet.
from inspect import signature
from functools import wraps
def dec(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
def dec2(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
def foo(a: int, b):
pass
print(signature(dec(foo)))
print(signature(dec2(foo)))
# Prints:
# (*args, **kwargs)
# (a:int, b)
Beachten Sie, dass ein signature
und nicht getargspec
zu verwenden hat. Getestet mit Python 3.4.
ein anderes Beispiel: [Erhaltung von Signaturen dekorierter Funktionen] (http://stackoverflow.com/q/147816/4279) – jfs