cython
1__doc__ = u"""
2>>> class1.plus(1)
36
4>>> class1.view()
5class1
6>>> class1().view()
7class1
8>>> class1.bview()
9class1
10>>> class1().bview()
11class1
12>>> class1().cview()
13class1
14>>> class1().cview("XX")
15class1XX
16
17>>> class2.view()
18class2
19>>> class2.plus(1)
207
21
22>>> class3.view()
23class3
24>>> class3.bview()
25class3
26>>> class3().bview()
27class3
28>>> class3.plus(1)
298
30
31>>> class4.view()
32class4
33>>> class5.view()
34class5
35"""
36
37cimport cython
38
39def f_plus(cls, a):
40return cls.a + a
41
42def second_decorator(f):
43# note - a class, not a function (didn't pass Cython's test in __Pyx_Method_ClassMethod)
44class C:
45def __call__(self, *args):
46return f(*args)
47return C()
48
49class class1:
50a = 5
51plus = classmethod(f_plus)
52def view(cls):
53print cls.__name__
54view = classmethod(view)
55
56@classmethod
57@cython.binding(True)
58def bview(cls):
59print cls.__name__
60
61@classmethod
62@second_decorator
63def cview(cls, s=""):
64print cls.__name__+s
65
66
67class class2(object):
68a = 6
69plus = classmethod(f_plus)
70def view(cls):
71print cls.__name__
72view = classmethod(view)
73
74
75cdef class class3:
76a = 7
77plus = classmethod(f_plus)
78def view(cls):
79print cls.__name__
80view = classmethod(view)
81
82@classmethod
83@cython.binding(True)
84def bview(cls):
85print cls.__name__
86
87
88class class4:
89@classmethod
90def view(cls):
91print cls.__name__
92
93
94class class5(class4):
95pass
96