Повторяющиеся имена членов перечисления в Cython - ошибка объявления?

Кажется, Cython не позволяет мне повторно использовать имена членов enum.

У меня есть следующие перечисления, которые я пытаюсь цитонизировать:

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 ответ

Это не ограничение Cython, но язык C, на который переводится код Python.

В C перечисления не вводят новую область имен, и поэтому происходит конфликт имен, если вы используете тот же идентификатор.

Обычная стратегия заключается в использовании префикса для различения перечислений, например:

cpdef enum Fruit:
       FRUIT_UNKNOWN = 0

cpdef enum Animal:
      ANIMAL_UNKNOWN = 1
Другие вопросы по тегам