Cython中重复的枚举成员名称 - 重新声明错误?

时间:2018-06-02 05:38:19

标签: python enums cython cythonize

Cython似乎不允许我重用枚举成员名称。

我有以下枚举,我正在尝试cythonize:

from enum import Enum

class Fruit(Enum):

    UNKNOWN = 0
    APPLE = 1
    ORANGE = 2

class Animal(Enum):

    UNKNOWN = 0
    DOG = 1
    CAT = 2

但以下结果导致'UNKNOWN' redeclared编译错误:

cpdef enum Fruit:

    UNKNOWN = 0
    APPLE = 1
    ORANGE = 2    

cpdef enum Animal:

    UNKNOWN = 0
    DOG = 1
    CAT = 

我该如何解决上述问题?

另外,我最好使用NULL作为枚举成员名称,而不是UNKNOWN。但似乎NULL是Cython的特权关键字,尽管它不适用于CPython。有没有解决方法?

1 个答案:

答案 0 :(得分:1)

这不是cython的限制,而是python代码翻译的C语言的限制。

在C中,枚举不会引入新的名称范围,因此如果使用相同的标识符,则会发生名称冲突。

通常的策略是使用前缀来区分枚举,例如:

cpdef enum Fruit:
       FRUIT_UNKNOWN = 0

cpdef enum Animal:
      ANIMAL_UNKNOWN = 1