如何从C创建Cython cdef公共类

时间:2012-06-18 00:15:05

标签: c cython

我有以下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 方法。

感谢。

2 个答案:

答案 0 :(得分:2)

create_ foo指定为defcpdefcdef - ed函数完全在C代码中转换,不会暴露给Python模块。

答案 1 :(得分:2)

我在Cython用户组中得到了答案:

公共应该被禁止使用方法,因为调用了 函数直接破坏子类化。如果你需要 从C调用方法,为每个方法编写一个包装函数 将对象作为额外参数,并调用该方法。 E.g。

cdef char * foo_wrapper(Foo obj):    return obj.foo()

如果你有很多方法,这是不方便的,所以如果你有控制权 在开始设计Foo时,不要使用方法而是使用 而不是功能。