1__doc__ = u""" 2 >>> f(1,2) 3 4 4 >>> f.HERE 5 1 6 7 >>> g(1,2) 8 5 9 >>> g.HERE 10 5 11 12 >>> h(1,2) 13 6 14 >>> h.HERE 15 1 16 >>> i(4) 17 3 18 >>> i.HERE 19 1 20""" 21 22class wrap: 23 def __init__(self, func): 24 self.func = func 25 self.HERE = 1 26 def __call__(self, *args, **kwargs): 27 return self.func(*args, **kwargs) 28 29def decorate(func): 30 try: 31 func.HERE += 1 32 except AttributeError: 33 func = wrap(func) 34 return func 35 36def decorate2(a,b): 37 return decorate 38 39@decorate 40def f(a,b): 41 return a+b+1 42 43@decorate 44@decorate 45@decorate 46@decorate 47@decorate 48def g(a,b): 49 return a+b+2 50 51@decorate2(1,2) 52def h(a,b): 53 return a+b+3 54 55class A: 56 def decorate(self, func): 57 return decorate(func) 58 59 60a = A() 61@a.decorate 62def i(x): 63 return x - 1 64