Разница между Enum и IntEnum в Python - PullRequest
0 голосов
/ 22 октября 2018

Я наткнулся на код, который выглядел так:

class State(IntEnum):
    READY = 1
    IN_PROGRESS = 2
    FINISHED = 3
    FAILED = 4

и пришел к выводу, что этот класс State может наследовать класс Enum таким же образом.

Что наследование от IntEnum дает мне, что наследование от обычного класса Enum не будет?В чем разница между ними?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

IntEnum используется для гарантии того, что члены должны быть целыми числами, т.е.

class State(IntEnum):
  READY = 'a'
  IN_PROGRESS = 'b'
  FINISHED = 'c'
  FAILED = 'd'

Это вызовет исключение:

ValueError: invalid literal for int() with base 10: 'a'
0 голосов
/ 22 октября 2018

Из питона Документы :

Enum: Базовый класс для создания перечисляемых констант.

и:

IntEnum: Базовый класс для создания перечисляемых констант, которые также являются подклассами int.

, он говорит, что членыIntEnum можно сравнить с целыми числами;Кроме того, целочисленные перечисления различных типов также можно сравнивать друг с другом.

посмотрите на приведенный ниже пример:

class Shape(IntEnum):
    CIRCLE = 1
    SQUARE = 2

class Color(Enum):
    RED = 1
    GREEN = 2

Shape.CIRCLE == Color.RED
>> False

Shape.CIRCLE == 1
>>True

, и они будут вести себя так же, как целое число:

['a', 'b', 'c'][Shape.CIRCLE]
>> 'b'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...