关于python:c速度cython属性,可能吗? 备择方案?

c speed cython properties, possible? alternatives?

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

我的类也用在另一个cython模块中,我想以c速度而不是python速度从类访问属性,否则它将抵消我使用cython所获得的加速。我知道如果我使用cdef setter和getter函数(例如get_params()和set_params(params))会更快,但是如果我执行此更改,那么我也必须在python代码中这样做(这样我的python和cython代码并没有太大的不同,并且可以兼容),但是这使得python代码的可读性降低了。

有没有一种快速的方式来访问cython中的属性?还是您有其他建议,这样我就不必更改python代码也可以使用setter和getter函数?


并非如此,因为描述符仅存在于Python级别。 让您的Cython代码实现getter和setter,并创建一个通过属性公开它们的Python类型。


要同时在python和cython中都提供该属性,您必须将其公开,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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