2014-02-22 68 views
0

我遇到一些麻煩,這一段代碼用Cython 2.0下運行:遞歸限制超出與用Cython CDEF類和超

cdef class Foo(object): 
    cpdef twerk(self): #using def instead does not help 
    print "Bustin' some awkward moves." 

cdef class ShyFoo(Foo): 
    cpdef twerk(self): 
    print "Do I really have to?" 
    super(self, ShyFoo).twerk() 
    print "I hate you so much." 

ShyFoo().twerk() 

RuntimeError: maximum recursion depth exceeded while calling a Python object

但是,刪除cdef S和與def小號取代cpdef小號讓我工作Python。

回溯看起來是這樣的:

File "mytest.pyx", line 61, in mytest.Foo.twerk 
    cpdef twerk(self): 
File "mytest.pyx", line 67, in mytest.ShyFoo.twerk 
    super(ShyFoo, self).twerk() 
File "mytest.pyx", line 61, in mytest.Foo.twerk 
    cpdef twerk(self): 
File "mytest.pyx", line 67, in mytest.ShyFoo.twerk 
    super(ShyFoo, self).twerk() 
.................................................... 

我在做什麼錯?我在4年前發現了this relevant ticket,但是我猜這是因爲用戶錯誤而沒有引起注意。

回答

1

看起來你在問題中鏈接到的錯誤就是問題所在。如果你將這兩個方法改爲def而不是cpdef,它就可以正常工作。或者,您可以刪除超級電話,如下所示:

cdef class Foo(object): 
    cpdef twerk(self): 
     print "Bustin' some awkward moves." 

cdef class ShyFoo(Foo): 
    cpdef twerk(self): 
     print "Do I really have to?" 
     Foo.twerk(self) 
     print "I hate you so much." 

ShyFoo().twerk()