On 2016-06-21 08:17, Jeroen Demeyer wrote:
But hang on, are you sure that this works? The C functions for cdef and cpdef functions have a different signature: cpdef functions have a __pyx_skip_dispatch argument while cdef functions don't have such an argument.
Answering my own question, it seems that Cython uses different vtab entries for the cdef and cpdef functions, where the cdef one calls the cpdef one with __pyx_skip_dispatch=0. The only difference with my proposal is that the cdef method cannot automatically be overridden by a def method. But that can be solved by cdef class MyClass(object): cdef foo(self): return (<object>self).foo() So this overriding of cdef methods by cpdef methods might completely solve my use case. Thanks!