You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cython如何在模块级别定义属性的getter与setter函数?

Cython模块级属性getter/setter相关问题解答

Cython原生没有内置你示例中@module_property这类直接定义模块级别属性getter/setter的语法,但可以通过自定义模块类的方式间接实现完全一致的使用效果。

实现原理很简单:Python的模块本质是内置module类型的实例,默认模块属性的读写不会触发描述符协议,所以类层面可以直接用的property语法无法直接应用在模块上,我们可以通过替换当前模块的类来实现支持:

cdef class CustomModule:
    property a:
        def __get__(self):
            cdef int a
            get_a(&a)
            return a
        def __set__(self, int a):
            set_a(&a)

# 模块初始化时替换当前模块的所属类
import sys
sys.modules[__name__].__class__ = CustomModule

完成上述定义后,其他代码导入该模块后,直接读写模块名.a就会自动触发对应的__get__和__set__方法,和你预期的功能完全一致。

如果你想要更接近你给出的装饰器写法,也可以自行封装module_property装饰器工具,本质就是动态给自定义模块类添加对应的属性,不过目前Cython没有内置这类语法糖。

内容的提问来源于stack exchange,提问作者nicholaswogan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:15:00