cython

Форк
0
/
classmethod.pyx 
95 строк · 1.4 Кб
1
__doc__ = u"""
2
>>> class1.plus(1)
3
6
4
>>> class1.view()
5
class1
6
>>> class1().view()
7
class1
8
>>> class1.bview()
9
class1
10
>>> class1().bview()
11
class1
12
>>> class1().cview()
13
class1
14
>>> class1().cview("XX")
15
class1XX
16

17
>>> class2.view()
18
class2
19
>>> class2.plus(1)
20
7
21

22
>>> class3.view()
23
class3
24
>>> class3.bview()
25
class3
26
>>> class3().bview()
27
class3
28
>>> class3.plus(1)
29
8
30

31
>>> class4.view()
32
class4
33
>>> class5.view()
34
class5
35
"""
36

37
cimport cython
38

39
def f_plus(cls, a):
40
    return cls.a + a
41

42
def second_decorator(f):
43
    # note - a class, not a function (didn't pass Cython's test in __Pyx_Method_ClassMethod)
44
    class C:
45
        def __call__(self, *args):
46
            return f(*args)
47
    return C()
48

49
class class1:
50
    a = 5
51
    plus = classmethod(f_plus)
52
    def view(cls):
53
        print cls.__name__
54
    view = classmethod(view)
55

56
    @classmethod
57
    @cython.binding(True)
58
    def bview(cls):
59
        print cls.__name__
60

61
    @classmethod
62
    @second_decorator
63
    def cview(cls, s=""):
64
        print cls.__name__+s
65

66

67
class class2(object):
68
    a = 6
69
    plus = classmethod(f_plus)
70
    def view(cls):
71
        print cls.__name__
72
    view = classmethod(view)
73

74

75
cdef class class3:
76
    a = 7
77
    plus = classmethod(f_plus)
78
    def view(cls):
79
        print cls.__name__
80
    view = classmethod(view)
81

82
    @classmethod
83
    @cython.binding(True)
84
    def bview(cls):
85
        print cls.__name__
86

87

88
class class4:
89
    @classmethod
90
    def view(cls):
91
        print cls.__name__
92

93

94
class class5(class4):
95
    pass
96

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.