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