3

我有一个 python 类,它有一些属性。我将类转换为 cython 扩展类型并在其中定义属性,使用属性http://docs.cython.org/src/userguide/extension_types.html#properties的 cython 语法。我看到必须使用 def 声明属性,否则会出现编译错误“此处不允许 cdef 语句”。

我的类也在另一个 cython 模块中使用,我想以 c 速度而不是 python 速度访问该类的属性,否则它会否定我通过使用 cython 获得的加速。我知道如果我使用像 get_params() 和 set_params(params) 这样的 cdef setter 和 getter 函数会更快,但是如果我做这个改变,那么我也必须在 python 代码中做这件事(这样我的 python 和 cython 代码差异不大并且可以兼容)但这使得python代码的可读性降低....进退两难!

有没有快速访问cython属性的方法?还是您有任何其他建议,这样我就不必更改我的 python 代码来使用 setter 和 getter 函数?

4

2 回答 2

3

不是真的,因为描述符只存在于 Python 级别。让您的 Cython 代码实现 getter 和 setter,并创建一个通过属性公开它们的 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 回答