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)