Decorator

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)