3

いくつかのプロパティを持つ python クラスがあります。クラスを cython 拡張型に変換し、プロパティの cython 構文を使用してその中にプロパティを定義しましたhttp://docs.cython.org/src/userguide/extension_types.html#properties。def を使用してプロパティを宣言する必要があることがわかります。そうしないと、「cdef ステートメントはここでは許可されていません」というコンパイル エラーが発生します。

私のクラスは別の cython モジュール内でも使用されており、Python の速度ではなく c の速度でクラスからプロパティにアクセスしたいと考えています。get_params() や set_params(params) などの cdef セッター関数とゲッター関数を使用すると高速になることはわかっていますが、この変更を行う場合は、Python コードでも行う必要があります (したがって、私の python と cython コードあまり違いはなく、互換性があります) しかし、それは python コードを読みにくくします.... ジレンマ!

cython のプロパティにすばやくアクセスする方法はありますか? または、setter 関数と getter 関数を使用するように Python コードを変更する必要がないように、他に何か提案はありますか?

4

2 に答える 2

3

記述子はPythonレベルでのみ存在するため、実際にはそうではありません。Cythonコードにゲッターとセッターを実装させ、プロパティを介してそれらを公開するPythonタイプを作成します。

于 2012-12-19T18:32:40.043 に答える
1

プロパティを python と cython の両方で利用できるようにするには、公開する必要があります。例:

cdef class PyBrowser:
    cdef CefRefPtr[CefBrowser] cefBrowser

    cdef public dict clientCallbacks
    cdef public list allowedClientCallbacks
    IF CEF_VERSION == 1:
        cdef public JavascriptBindings javascriptBindings
    cdef public dict userData

    # Properties used by ToggleFullscreen().
    cdef public int isFullscreen
    cdef public int maximized
    cdef public int gwlStyle
    cdef public int gwlExStyle
    cdef public tuple windowRect
于 2012-12-20T11:00:40.883 に答える