【发布时间】:2020-10-11 19:37:29
【问题描述】:
我正在学习 Cython,现在正在尝试它。我尝试了基本的 cdef 类示例程序,它运行良好。
现在我想做的是在 cdef 类类型中混合 cdef 和非 cdef 混合属性,像这样
cdef class Context:
cdef public int byteIndex, bitIndex
def __init__(self, msg = "", msg_len = 0):
self.msg = msg
self.msg_len = msg_len
self.byteIndex = 0
self.bitIndex = 7
但是一旦我实例化对象我就会得到错误
!! AttributeError: 'c_asnbase.Context' object has no attribute 'msg'
这是否意味着一旦你用 cdef 定义了一个 python 类,所有 self.* 属性都必须被 cdef 定义?
【问题讨论】:
-
“现在我想做的是混合使用 cdef 和非 cdef 混合属性” - 为什么?
-
因为我觉得类似字符串的属性在 python 中更容易处理。所以想知道我是否可以在 python 中保留字符串属性并仅将数字属性转换为 cdef。
-
"我觉得类似字符串的属性在 python 中更容易处理" - cdef 不会阻止 Python 访问你的属性。毕竟,您将它们标记为公开。