5

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

谢谢。

4

2 回答 2

5

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

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

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

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

于 2012-06-23T16:01:45.203 回答
3

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

于 2012-06-18T15:04:39.610 回答