如何从 C 创建 Cython cdef 公共类

Dmi*_*mov 5 c cython

我有以下 test.pyx

cdef public class Foo[object Foo, type FooType]:  
   cdef public char* foo(self):  
       r = "Foo"  
       return r  
Run Code Online (Sandbox Code Playgroud)

cython 将该代码编译为 test.h 和 test.c,一切看起来都很好,但我不知道如何从 C 代码创建Foo对象。

即使我使用 Cython 函数创建它:

cdef public Foo create_Foo():
   return Foo()
Run Code Online (Sandbox Code Playgroud)

我不知道如何调用foo方法。

谢谢。

Dmi*_*mov 5

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

方法可能应该禁止使用 public,因为直接调用函数会破坏子类化。如果需要从 C 调用该方法,请为每个将对象作为额外参数的方法编写一个包装函数,然后调用该方法。例如

cdef char *foo_wrapper(Foo obj):
   return obj.foo()
Run Code Online (Sandbox Code Playgroud)

如果你有很多方法会很不方便,所以如果你一开始就能控制 Foo 的设计,就不要使用方法,而是使用函数。