The first decorator example shows how a function is used to decorate a function.
#!/usr/bin/env python
def dec1(func):
"""A function decorator."""
def wrapper(*args, **kwargs):
print( "before", func.__name__)
return_value = func(*args, **kwargs)
print( "after", func.__name__)
return return_value
return wrapper
@dec1
def sum(a,b):
temp = a + b
print( "sum", a,"+", b, ":", temp)
return temp
result = sum(3, b=4)
print( result)
Output:
before sum
sum 3 + 4 : 7
after sum
7
The decorator dec2 wraps some code around the function sum.
class dec2(object):
"""A function decorator."""
def __init__( self):
self.func = None
def __call__( self, func):
self.func = func
return self.wrapper
def wrapper(self, *args, **kwargs):
print( "before", self.func.__name__)
return_value = self.func(*args, **kwargs)
print( "after", self.func.__name__)
return return_value
@dec2()
def sum(a,b):
return a+b
result = sum(3, b=4)
print( result)