我想要类似的东西,以便可以从单个引用访问值对的任何一部分。香草版本:
from enum import IntEnum
class EnumDemo(IntEnum):
    ENUM_ZERO       = 0
    ENUM_ONE        = 1
    ENUM_TWO        = 2
    ENUM_THREE      = 3
    ENUM_INVALID    = 4
print('Passes')
print('1) %d'%(EnumDemo['ENUM_TWO']))
print('2) %s'%(EnumDemo['ENUM_TWO']))
print('3) %s'%(EnumDemo.ENUM_TWO.name))
print('4) %d'%(EnumDemo.ENUM_TWO))
print()
print('Fails')
print('1) %d'%(EnumDemo.ENUM_TWOa))
失败将引发异常。
一个更强大的版本:
class EnumDemo():
    enumeration =   (
                        'ENUM_ZERO',    
                        'ENUM_ONE',     
                        'ENUM_TWO',     
                        'ENUM_THREE',   
                        'ENUM_INVALID'  
                    )
    def name(self, val):
        try:
            name = self.enumeration[val]
        except IndexError:
            
            name = self.enumeration[len(self.enumeration) - 1]
        return name
    def number(self, val):
        try:
            index = self.enumeration.index(val)
        except (TypeError, ValueError):
            
            index = (len(self.enumeration) - 1)
        return index
print('Passes')
print('1) %d'%(EnumDemo().number('ENUM_TWO')))
print('2) %s'%(EnumDemo().number('ENUM_TWO')))
print('3) %s'%(EnumDemo().name(1)))
print('4) %s'%(EnumDemo().enumeration[1]))
print()
print('Fails')
print('1) %d'%(EnumDemo().number('ENUM_THREEa')))
print('2) %s'%(EnumDemo().number('ENUM_THREEa')))
print('3) %s'%(EnumDemo().name(11)))
print('4) %s'%(EnumDemo().enumeration[-1]))
如果使用不正确,这可以避免产生异常,而是传回故障指示。一种更Python化的方法是返回“ None”,但是我的特定应用程序直接使用文本。