我有以下test.pyx
cdef public class Foo[object Foo, type FooType]:
cdef public char* foo(self):
r = "Foo"
return r
cython将该代码编译为test.h和test.c,一切看起来都很好,但我无法弄清楚如何从C代码创建 Foo 对象。
即使我使用Cython函数创建它:
cdef public Foo create_Foo():
return Foo()
我无法弄清楚如何调用 foo 方法。
感谢。
答案 0 :(得分:2)
将create_ foo
指定为def
或cpdef
。 cdef
- ed函数完全在C代码中转换,不会暴露给Python模块。
答案 1 :(得分:2)
我在Cython用户组中得到了答案:
公共应该被禁止使用方法,因为调用了 函数直接破坏子类化。如果你需要 从C调用方法,为每个方法编写一个包装函数 将对象作为额外参数,并调用该方法。 E.g。
cdef char * foo_wrapper(Foo obj): return obj.foo()
如果你有很多方法,这是不方便的,所以如果你有控制权 在开始设计Foo时,不要使用方法而是使用 而不是功能。