단일 참조에서 값 쌍의 일부에 액세스 할 수 있도록 비슷한 것을 원했습니다. 바닐라 버전 :
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]))
올바르게 사용되지 않으면 예외 생성을 방지하고 대신 오류 표시를 다시 전달합니다. 이 작업을 수행하는 좀 더 파이썬적인 방법은 "None"을 다시 전달하는 것이지만 내 특정 응용 프로그램은 텍스트를 직접 사용합니다.