Python 如何为Cython中的uu init_uuu定义传入参数

Python 如何为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

页码: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.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才能工作