Python 如何为Cython中的uu init_uuu定义传入参数
页码:9/47Python 如何为Cython中的uu init_uuu定义传入参数,python,cython,Python,Cython,页码:9/47 cimport cqueue cdef class Queue: cdef cqueue.Queue _c_queue def __cinit__(self): self._c_queue = cqueue.queue_new() if self._c_queue is NULL: raise MemoryError() def __init__(self, name): # I added this section self
cimport cqueue
cdef class Queue:
cdef cqueue.Queue _c_queue
def __cinit__(self):
self._c_queue = cqueue.queue_new()
if self._c_queue is NULL:
raise MemoryError()
def __init__(self, name): # I added this section
self.name = name # Queue' object has no attribute 'name'
在我构建文件并使用q=Queue('hello')
之后,编译器总是给我错误信息
“队列”对象没有属性“名称”
您在
\uuuu init\uuuu
行中缺少一个括号,但我认为这不是真正的问题(-现在已在编辑中修复)
您的问题是,因此只能添加预定义的属性。因此,您需要告诉它该类有一个名为name
的属性:
cdef class Queue:
cdef cqueue.Queue _c_queue
cdef name # not specifying a type makes it a Python object
# ...
您可能希望将name
cdef公开
,以便也可以从Python访问它
作为替代方案,您可以为该类提供一个字典,该字典应允许设置任意属性,但代价是访问速度较慢且对象较大:
cdef class Queue
cdef cqueue.Queue _c_queue
cdef dict __dict__
# ...
这似乎需要一个合理的最新(去年左右)版本的Cython才能工作