我有一个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函数?
答案 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