3
# tag: cyfunction, qualname, pure3.5
5
from __future__ import print_function
12
>>> test_qualname.__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__
23
def test_builtin_qualname():
25
>>> test_builtin_qualname()
29
print([1, 2, 3].append.__qualname__)
30
print(len.__qualname__)
33
def test_nested_qualname():
35
>>> outer, lambda_func, XYZ = test_nested_qualname()
36
defining class XYZ XYZ qualname
37
defining class Inner XYZ.Inner qualname
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'
46
>>> outer_result().test.__qualname__
47
'test_nested_qualname.<locals>.outer.<locals>.Test.test'
49
>>> outer_result_test_result = outer_result().test()
50
defining class XYZInner XYZinner qualname
51
>>> outer_result_test_result.__qualname__
53
>>> outer_result_test_result.Inner.__qualname__
55
>>> outer_result_test_result.Inner.inner.__qualname__
56
'XYZinner.Inner.inner'
58
>>> lambda_func.__qualname__
59
'test_nested_qualname.<locals>.<lambda>'
63
>>> XYZ.Inner.__qualname__
65
>>> XYZ.Inner.inner.__qualname__
70
print("defining class Test", __qualname__, __module__)
74
print("defining class XYZInner", __qualname__, __module__)
84
print("defining class XYZ", __qualname__, __module__)
86
print("defining class Inner", __qualname__, __module__)
90
return outer, lambda:None, XYZ
96
>>> print(CdefClass.qn, CdefClass.m)
98
>>> print(CdefClass.__qualname__, CdefClass.__module__)
101
#>>> print(CdefClass.l["__qualname__"], CdefClass.l["__module__"])
107
# TODO - locals and cdef classes is unreliable, irrespective of qualname
108
# l = locals().copy()
111
# TODO - locals and cdef classes is unreliable, irrespective of qualname
113
#class CdefOnlyLocals:
115
# >>> print(CdefOnlyLocals.l["__qualname__"], CdefOnlyLocals.l["__module__"])
116
# CdefOnlyLocals qualname
121
class CdefModifyNames:
123
>>> print(CdefModifyNames.qn_reassigned, CdefModifyNames.m_reassigned)
124
I'm not a qualname I'm not a module
126
# TODO - enable when https://github.com/cython/cython/issues/4815 is fixed
127
#>>> hasattr(CdefModifyNames, "qn_deleted")
129
#>>> hasattr(CdefModifyNames, "m_deleted")
132
#>>> print(CdefModifyNames.l["__qualname__"], CdefModifyNames.l["__module__"])
133
#I'm not a qualname I'm not a module
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
141
# TODO del inside cdef class scope is broken
142
# https://github.com/cython/cython/issues/4815
146
# qn_deleted = __qualname__
150
# m_deleted = __module__