在Python中为我的程序将int强制转换为enum?
在python中,如何将在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
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