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