1# cython: binding=True 2# mode: run 3# tag: cyfunction,qualname 4 5import sys 6 7 8def test_qualname(): 9 """ 10 >>> test_qualname.__qualname__ 11 'test_qualname' 12 >>> test_qualname.__qualname__ = 123 #doctest:+ELLIPSIS 13 Traceback (most recent call last): 14 TypeError: __qualname__ must be set to a ... object 15 >>> test_qualname.__qualname__ = 'foo' 16 >>> test_qualname.__qualname__ 17 'foo' 18 """ 19 20 21def test_builtin_qualname(): 22 """ 23 >>> test_builtin_qualname() 24 list.append 25 len 26 """ 27 if sys.version_info >= (3, 3): 28 print([1, 2, 3].append.__qualname__) 29 print(len.__qualname__) 30 else: 31 print('list.append') 32 print('len') 33 34 35def test_nested_qualname(): 36 """ 37 >>> outer, lambda_func, XYZ = test_nested_qualname() 38 39 >>> outer().__qualname__ 40 'test_nested_qualname.<locals>.outer.<locals>.Test' 41 >>> outer().test.__qualname__ 42 'test_nested_qualname.<locals>.outer.<locals>.Test.test' 43 >>> outer()().test.__qualname__ 44 'test_nested_qualname.<locals>.outer.<locals>.Test.test' 45 46 >>> outer()().test().__qualname__ 47 'XYZinner' 48 >>> outer()().test().Inner.__qualname__ 49 'XYZinner.Inner' 50 >>> outer()().test().Inner.inner.__qualname__ 51 'XYZinner.Inner.inner' 52 53 >>> lambda_func.__qualname__ 54 'test_nested_qualname.<locals>.<lambda>' 55 56 >>> XYZ.__qualname__ 57 'XYZ' 58 >>> XYZ.Inner.__qualname__ 59 'XYZ.Inner' 60 >>> XYZ.Inner.inner.__qualname__ 61 'XYZ.Inner.inner' 62 """ 63 def outer(): 64 class Test(object): 65 def test(self): 66 global XYZinner 67 class XYZinner: 68 class Inner: 69 def inner(self): 70 pass 71 72 return XYZinner 73 return Test 74 75 global XYZ 76 class XYZ(object): 77 class Inner(object): 78 def inner(self): 79 pass 80 81 return outer, lambda:None, XYZ 82