在Python中为我的程序将int强制转换为enum?

在Python中为我的程序将int强制转换为enum?,python,python-2.7,python-3.x,casting,enums,Python,Python 2.7,Python 3.x,Casting,Enums,在python中,如何将int转换为enum?如果希望在int和enum之间灵活转换,可以使用 注意:如果您使用的是python,则可以使用内置的Enum(python 3.4+)、后端口,或者,对于更高级的需求(这不是),可以使用新库 如果使用IntEnum: class RGB(IntEnum): red = 1 green = 2 blue = 3 curBattryState=BatteryState.Charging 如果您有一个int并且想要匹配的Enum

在python中,如何将
int
转换为
enum

如果希望在
int
和enum之间灵活转换,可以使用


注意:如果您使用的是python,则可以使用内置的
Enum
(python 3.4+)、后端口,或者,对于更高级的需求(这不是),可以使用新库

如果使用
IntEnum

class RGB(IntEnum):
    red = 1
    green = 2
    blue = 3
curBattryState=BatteryState.Charging
如果您有一个
int
并且想要匹配的
Enum
成员:

>>> c = 2
>>> c = RGB(c)
>>> c
<RGB.green: 2>
IntEnum
的缺点是,每个
IntEnum
成员将与具有相同值的所有其他
IntEnum
成员进行相等的比较:

class Fruit(IntEnum):
    banana = 1

>>> Fruit.banana == Color.red
True
如果您想保持
Enum
s的独立性,但又不想失去
int
IntEnum
功能,您可以执行以下操作:

class RGB(Enum):
    red = 1
    green = 2
    blue = 3
    def __int__(self):
        return self.value
查找的工作原理相同:

>>> c = 2
>>> c = RGB(c)
>>> c
<RGB.green: 2>
因此,您必须强制转换它(或访问
属性):

如果
水果.香蕉
等于
RGB.红色
,我们就不再有问题了:

>>> Fruit(1) == RGB(1)
False

如果您使用的是Python 3+,则可以使用
aenum
做一些很酷的事情,例如:

import aenum

class RGB(aenum.Enum, start=1):
    red
    green
    blue
    def __int__(self):
        return self.value

这将产生与上一个
枚举
示例相同的类。

对于最新的
Python 3.7和一些枚举:

从枚举导入枚举
类别BatteryState(枚举):
未知=0
未插电=1
充电=2
满=3
将Int转换为Enum 只需将int传递到
Enum

batteryStatint=2
路缘属性=电池状态(电池状态)
打印(“curBattryState=%s”%curBattryState)
可以得到您想要的
Enum

class RGB(IntEnum):
    red = 1
    green = 2
    blue = 3
curBattryState=BatteryState.Charging
额外的 可以通过
name

cobbattrystatename=cobbattrystate.name
打印(“curBattryStateName=%s”%curBattryStateName)

无法获得预期值:
收费

Python 2上的stdlib中没有枚举。或者你的意思是你有接受枚举的C代码,你想从Python调用它?@J.F.Sebastian,在某些情况下就是这样。
import aenum

class RGB(aenum.Enum, start=1):
    red
    green
    blue
    def __int__(self):
        return self.value
curBattryState=BatteryState.Charging