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 |