Saya menginginkan sesuatu yang serupa sehingga saya dapat mengakses salah satu bagian dari pasangan nilai dari satu referensi. Versi vanilla:
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))
Kegagalan memunculkan pengecualian seperti yang diharapkan.
Versi yang lebih kuat:
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]))
Jika tidak digunakan dengan benar, ini menghindari pembuatan pengecualian dan, sebagai gantinya, mengembalikan indikasi kesalahan. Cara yang lebih Pythonic untuk melakukan ini adalah dengan mengirimkan kembali "Tidak ada" tetapi aplikasi khusus saya menggunakan teks secara langsung.