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。有没有解决方法?
答案 0 :(得分:1)
这不是cython的限制,而是python代码翻译的C语言的限制。
在C中,枚举不会引入新的名称范围,因此如果使用相同的标识符,则会发生名称冲突。
通常的策略是使用前缀来区分枚举,例如:
cpdef enum Fruit:
FRUIT_UNKNOWN = 0
cpdef enum Animal:
ANIMAL_UNKNOWN = 1