在Cython代码中定义将在代码的C部分中使用的枚举

时间:2012-02-18 13:19:03

标签: python enums cython cpython

我在cython头文件enum中定义了api.pxd

ctypedef enum InstructionType:
    default = 0
    end_if = 1
    end_loop = 2
    backward_jump_here = 4

我也检查过将ctypedef转为cdef是否有效(但事实并非如此)。

我希望在__cinit__方法的某个类中使用此枚举中的值:

from api cimport Instruction, CLinVM, InstructionType

# (...) some other classes

cdef class EndIf(Noop):
   def __cinit__(self):
      self.type = InstructionType.end_if

我收到编译错误:

    self.type = InstructionType.end_if
                              ^
------------------------------------------------------------
 /home/(...)/instructions.pyx:149:35: 'InstructionType' is not a constant, 

以这种方式定义和使用枚举的任何方式?

1 个答案:

答案 0 :(得分:2)

您不能通过它们所属的类型名来访问枚举常量,既不能在C中,也不能在C ++中,也不能在Cython中访问。你需要为它创建一个包装器.pxd