我在使用Cython 2.0运行的这段代码时遇到了一些麻烦:
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:调用Python对象时超出了最大递归深度
但是,删除cdef
并用cpdef
替换def
s会让我使用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,但我想由于用户错误而没有引起注意。
答案 0 :(得分:1)
您问题中链接的错误似乎就是问题所在。如果你将两个方法都改为def而不是cpdef,那么它可以正常工作。或者,你可以删除对super的调用:
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()