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 User Group で得た答え:

関数を直接呼び出すとサブクラス化が中断されるため、メソッドの public はおそらく許可されないはずです。C からメソッドを呼び出す必要がある場合は、オブジェクトを追加の引数として受け取るメソッドごとにラッパー関数を記述し、メソッドを呼び出します。例えば

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

メソッドがたくさんあると不便なので、最初から Foo の設計を制御できる場合は、メソッドを使用せずに関数を使用します。

于 2012-06-23T16:01:45.203 に答える
3

またはとして指定create_ fooします。--ed関数は完全にCコードに変換され、Pythonモジュールには公開されません。defcpdefcdef

于 2012-06-18T15:04:39.610 に答える