c速度cython属性,可能吗?备择方案?

时间:2012-12-19 18:06:23

标签: python properties cython getter-setter

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

我的类也在另一个cython模块中使用,我想以c速度而不是python速度访问类中的属性,否则它会通过使用cython来增加我获得的加速。我知道如果我使用cdef setter和getter函数(如get_params()和set_params(params)会更快但是如果我做了这个更改,那么我也必须在python代码中执行它(这样我的python和cython代码)没有太大的差异,可以兼容)但这使得python代码不太可读......困境!

有一种快速访问cython属性的方法吗?或者您是否有任何其他建议,以便我不必更改我的python代码以使用setter和getter函数?

2 个答案:

答案 0 :(得分:3)

不是真的,因为描述符只存在于Python级别。让你的Cython代码实现getter和setter,并创建一个通过属性公开它们的Python类型。

答案 1 :(得分:1)

要在python和amp;中使用该属性。 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