파이썬에서 int를 Enum으로 변환하는 방법은 무엇입니까?
파이썬 2.7.6과 함께 새로운 Enum 기능 ( 백 포트 enum34 를 통해 ) 사용.
다음 정의가 주어지면 int를 해당 Enum 값으로 어떻게 변환 할 수 있습니까?
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
변환을 수행하기 위해 일련의 if 문을 직접 만들 수 있다는 것을 알고 있지만 쉽게 변환 할 수있는 파이썬적인 방법이 있습니까? 기본적으로 열거 형 값을 반환하는 ConvertIntToFruit (int) 함수를 원합니다.
내 사용 사례는 각 레코드를 객체로 읽는 CSV 파일이 있다는 것입니다. 파일 필드 중 하나는 열거를 나타내는 정수 필드입니다. 개체를 채울 때 파일의 해당 정수 필드를 개체의 해당 Enum 값으로 변환하고 싶습니다.
Enum
수업에 '전화'합니다 .
Fruit(5)
차례에 5
로 Fruit.Orange
:
>>> from enum import Enum
>>> class Fruit(Enum):
... Apple = 4
... Orange = 5
... Pear = 6
...
>>> Fruit(5)
<Fruit.Orange: 5>
문서의 열거 형 멤버 및 해당 속성 섹션에 대한 프로그래밍 방식 액세스에서 :
때로는 프로그래밍 방식으로 열거 형 멤버에 액세스하는 것이 유용합니다 (예 :
Color.red
프로그램 작성시 정확한 색상을 알 수 없기 때문에 그렇지 않은 상황 ).Enum
이러한 액세스를 허용합니다.>>> Color(1) <Color.red: 1> >>> Color(3) <Color.blue: 3>
관련 참고 : 열거 형 멤버 의 이름 이 포함 된 문자열 값을 매핑 하려면 subscription을 사용합니다.
>>> s = 'Apple'
>>> Fruit[s]
<Fruit.Apple: 4>
나는 간단한 단어에하면 변환하는 것입니다 생각 int
에 값을 Enum
호출하여 EnumType(int_value)
대한 액세스 후, name
의 Enum
목적 :
my_fruit_from_int = Fruit(5) #convert to int
fruit_name = my_fruit_from_int.name #get the name
print(fruit_name) #Orange will be printed here
또는 함수로 :
def convert_int_to_fruit(int_value):
try:
my_fruit_from_int = Fruit(int_value)
return my_fruit_from_int.name
except:
return None
단일 참조에서 값 쌍의 일부에 액세스 할 수 있도록 비슷한 것을 원했습니다. 바닐라 버전 :
#!/usr/bin/env python3
from enum import IntEnum
class EnumDemo(IntEnum):
ENUM_ZERO = 0
ENUM_ONE = 1
ENUM_TWO = 2
ENUM_THREE = 3
ENUM_INVALID = 4
#endclass.
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))
실패하면 예상대로 예외가 발생합니다.
A more robust version:
#!/usr/bin/env python3
class EnumDemo():
enumeration = (
'ENUM_ZERO', # 0.
'ENUM_ONE', # 1.
'ENUM_TWO', # 2.
'ENUM_THREE', # 3.
'ENUM_INVALID' # 4.
)
def name(self, val):
try:
name = self.enumeration[val]
except IndexError:
# Always return last tuple.
name = self.enumeration[len(self.enumeration) - 1]
return name
def number(self, val):
try:
index = self.enumeration.index(val)
except (TypeError, ValueError):
# Always return last tuple.
index = (len(self.enumeration) - 1)
return index
#endclass.
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]))
When not used correctly this avoids creating an exception and, instead, passes back a fault indication. A more Pythonic way to do this would be to pass back "None" but my particular application uses the text directly.
참고URL : https://stackoverflow.com/questions/23951641/how-to-convert-int-to-enum-in-python
'program tip' 카테고리의 다른 글
JBehave와 Cucumber의 차이점은 무엇입니까? (0) | 2020.12.01 |
---|---|
.csproj 어셈블리에 대한 다중 힌트 경로 (0) | 2020.12.01 |
지연 로딩 vs Eager 로딩 (0) | 2020.12.01 |
메이크 파일 디버깅 도구 (0) | 2020.12.01 |
.RData에 데이터 파일을 저장하는 방법은 무엇입니까? (0) | 2020.11.30 |