cython

Форк
0
/
qualname.py 
152 строки · 4.1 Кб
1
# cython: binding=True
2
# mode: run
3
# tag: cyfunction, qualname, pure3.5
4

5
from __future__ import print_function
6

7
import cython
8

9

10
def test_qualname():
11
    """
12
    >>> test_qualname.__qualname__
13
    'test_qualname'
14
    >>> test_qualname.__qualname__ = 123 #doctest:+ELLIPSIS
15
    Traceback (most recent call last):
16
    TypeError: __qualname__ must be set to a ... object
17
    >>> test_qualname.__qualname__ = 'foo'
18
    >>> test_qualname.__qualname__
19
    'foo'
20
    """
21

22

23
def test_builtin_qualname():
24
    """
25
    >>> test_builtin_qualname()
26
    list.append
27
    len
28
    """
29
    print([1, 2, 3].append.__qualname__)
30
    print(len.__qualname__)
31

32

33
def test_nested_qualname():
34
    """
35
    >>> outer, lambda_func, XYZ = test_nested_qualname()
36
    defining class XYZ XYZ qualname
37
    defining class Inner XYZ.Inner qualname
38

39
    >>> outer_result = outer()
40
    defining class Test test_nested_qualname.<locals>.outer.<locals>.Test qualname
41
    >>> outer_result.__qualname__
42
    'test_nested_qualname.<locals>.outer.<locals>.Test'
43
    >>> outer_result.test.__qualname__
44
    'test_nested_qualname.<locals>.outer.<locals>.Test.test'
45

46
    >>> outer_result().test.__qualname__
47
    'test_nested_qualname.<locals>.outer.<locals>.Test.test'
48

49
    >>> outer_result_test_result = outer_result().test()
50
    defining class XYZInner XYZinner qualname
51
    >>> outer_result_test_result.__qualname__
52
    'XYZinner'
53
    >>> outer_result_test_result.Inner.__qualname__
54
    'XYZinner.Inner'
55
    >>> outer_result_test_result.Inner.inner.__qualname__
56
    'XYZinner.Inner.inner'
57

58
    >>> lambda_func.__qualname__
59
    'test_nested_qualname.<locals>.<lambda>'
60

61
    >>> XYZ.__qualname__
62
    'XYZ'
63
    >>> XYZ.Inner.__qualname__
64
    'XYZ.Inner'
65
    >>> XYZ.Inner.inner.__qualname__
66
    'XYZ.Inner.inner'
67
    """
68
    def outer():
69
        class Test(object):
70
            print("defining class Test", __qualname__, __module__)
71
            def test(self):
72
                global XYZinner
73
                class XYZinner:
74
                    print("defining class XYZInner", __qualname__, __module__)
75
                    class Inner:
76
                        def inner(self):
77
                            pass
78

79
                return XYZinner
80
        return Test
81

82
    global XYZ
83
    class XYZ(object):
84
        print("defining class XYZ", __qualname__, __module__)
85
        class Inner(object):
86
            print("defining class Inner", __qualname__, __module__)
87
            def inner(self):
88
                pass
89

90
    return outer, lambda:None, XYZ
91

92

93
@cython.cclass
94
class CdefClass:
95
    """
96
    >>> print(CdefClass.qn, CdefClass.m)
97
    CdefClass qualname
98
    >>> print(CdefClass.__qualname__, CdefClass.__module__)
99
    CdefClass qualname
100

101
    #>>> print(CdefClass.l["__qualname__"], CdefClass.l["__module__"])
102
    #CdefClass qualname
103
    """
104
    qn = __qualname__
105
    m = __module__
106

107
    # TODO - locals and cdef classes is unreliable, irrespective of qualname
108
    # l = locals().copy()
109

110

111
# TODO - locals and cdef classes is unreliable, irrespective of qualname
112
#@cython.cclass
113
#class CdefOnlyLocals:
114
#    """
115
#    >>> print(CdefOnlyLocals.l["__qualname__"], CdefOnlyLocals.l["__module__"])
116
#    CdefOnlyLocals qualname
117
#    """
118
#    l = locals().copy()
119

120
@cython.cclass
121
class CdefModifyNames:
122
    """
123
    >>> print(CdefModifyNames.qn_reassigned, CdefModifyNames.m_reassigned)
124
    I'm not a qualname I'm not a module
125

126
    # TODO - enable when https://github.com/cython/cython/issues/4815 is fixed
127
    #>>> hasattr(CdefModifyNames, "qn_deleted")
128
    #False
129
    #>>> hasattr(CdefModifyNames, "m_deleted")
130
    #False
131

132
    #>>> print(CdefModifyNames.l["__qualname__"], CdefModifyNames.l["__module__"])
133
    #I'm not a qualname I'm not a module
134
    """
135
    __qualname__ = "I'm not a qualname"
136
    __module__ = "I'm not a module"
137
    qn_reassigned = __qualname__
138
    m_reassigned = __module__
139
    # TODO - locals and cdef classes is unreliable, irrespective of qualname
140
    #l = locals().copy()
141
    # TODO del inside cdef class scope is broken
142
    # https://github.com/cython/cython/issues/4815
143
    #del __qualname__
144
    #del __module__
145
    #try:
146
    #    qn_deleted = __qualname__
147
    #except NameError:
148
    #    pass
149
    #try:
150
    #    m_deleted = __module__
151
    #except NameError:
152
    #    pass
153

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

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

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

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