1# mode: run 2# tag: cyfunction 3# cython: binding=True 4 5cimport cython 6 7 8class PyClass(object): 9 a = 2 10 11 12class PyClass99(object): 13 a = 99 14 15 def pymethod(self, x, y=1, z=PyClass): 16 """ 17 >>> obj = PyClass99() 18 >>> obj.pymethod(0) 19 (0, 1, 2) 20 """ 21 return x, y, z.a 22 23 24cdef class CyClass: 25 cpdef cpmethod(self, x, y=1, z=PyClass): 26 """ 27 >>> obj = CyClass() 28 >>> obj.cpmethod(0) 29 (0, 1, 2) 30 >>> obj.cpmethod(0, 3) 31 (0, 3, 2) 32 >>> obj.cpmethod(0, 3, PyClass) 33 (0, 3, 2) 34 >>> obj.cpmethod(0, 3, 5) 35 Traceback (most recent call last): 36 AttributeError: 'int' object has no attribute 'a' 37 """ 38 return x, y, z.a 39 40 y_value = 3 41 p_class = PyClass 42 43 cpdef cpmethod2(self, x, y=y_value, z=p_class): 44 """ 45 >>> obj = CyClass() 46 >>> obj.cpmethod2(0) 47 (0, 3, 2) 48 """ 49 return x, y, z.a 50 51 def pymethod(self, x, y=y_value, z=p_class): 52 """ 53 >>> obj = CyClass() 54 >>> obj.pymethod(0) 55 (0, 3, 2) 56 """ 57 return x, y, z.a 58 59 # change values to check that defaults above stay unmodified 60 y_value = 98 61 p_class = PyClass99 62 63 64cpdef func(x, y=1, z=PyClass): 65 """ 66 >>> func(0) 67 (0, 1, 2) 68 >>> func(0, 3) 69 (0, 3, 2) 70 >>> func(0, 3, PyClass) 71 (0, 3, 2) 72 >>> func(0, 3, 5) 73 Traceback (most recent call last): 74 AttributeError: 'int' object has no attribute 'a' 75 """ 76 return x, y, z.a 77 78 79@cython.ccall 80def pyfunc(x, y=1, z=PyClass): 81 """ 82 >>> pyfunc(0) 83 (0, 1, 2) 84 >>> pyfunc(0, 3) 85 (0, 3, 2) 86 >>> pyfunc(0, 3, PyClass) 87 (0, 3, 2) 88 >>> pyfunc(0, 3, 5) 89 Traceback (most recent call last): 90 AttributeError: 'int' object has no attribute 'a' 91 """ 92 return x, y, z.a 93