1cimport cython 2 3cdef class CBase(object): 4 cdef int a 5 cdef c_method(self): 6 return "CBase" 7 cpdef cpdef_method(self): 8 return "CBase" 9 10class PyBase(object): 11 def py_method(self): 12 return "PyBase" 13 14@cython.binding(True) 15cdef class BothBound(CBase, PyBase): 16 cdef dict __dict__ 17 """ 18 >>> b = Both() 19 >>> b.py_method() 20 'PyBase' 21 >>> b.cp_method() 22 'Both' 23 >>> b.call_c_method() 24 'Both' 25 26 >>> isinstance(b, CBase) 27 True 28 >>> isinstance(b, PyBase) 29 True 30 """ 31 cdef c_method(self): 32 return "Both" 33 cpdef cp_method(self): 34 return "Both" 35 def call_c_method(self): 36 return self.c_method() 37 38cdef class BothSub(BothBound): 39 """ 40 >>> b = BothSub() 41 >>> b.py_method() 42 'PyBase' 43 >>> b.cp_method() 44 'Both' 45 >>> b.call_c_method() 46 'Both' 47 """ 48 pass 49 50@cython.binding(False) 51cdef class BothUnbound(CBase, PyBase): 52 cdef dict __dict__ 53 """ 54 >>> b = Both() 55 >>> b.py_method() 56 'PyBase' 57 >>> b.cp_method() 58 'Both' 59 >>> b.call_c_method() 60 'Both' 61 62 >>> isinstance(b, CBase) 63 True 64 >>> isinstance(b, PyBase) 65 True 66 """ 67 cdef c_method(self): 68 return "Both" 69 cpdef cp_method(self): 70 return "Both" 71 def call_c_method(self): 72 return self.c_method() 73