파이썬에서 int를 Enum으로 변환하는 방법은 무엇입니까?
python 2.7.6에서 backport enum34를 통한 새로운 Enum 기능 사용.
다음 정의에 따라 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>
관련 참고: 열거 멤버의 이름을 포함하는 문자열 값을 매핑하려면 서브스크립션을 사용합니다.
>>> 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))
오류가 발생하면 예상대로 예외가 발생합니다.
보다 강력한 버전:
#!/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]))
올바르게 사용하지 않으면 예외가 생성되지 않고 대신 오류 표시를 전달합니다.이를 위한 더 파이썬적인 방법은 "없음"을 되돌리는 것이지만, 내 특정 응용 프로그램은 텍스트를 직접 사용합니다.
class Status(IntEnum):
UPLOADED = 1
DOWNLOADED = 5
SEGMENTED = 10
DIRECTED = 15
READYTODEEP = 20
열거형을 가져옵니다.
statusId = 5
Status(statusId)
열거형의 문자열 값을 가져옵니다.
statusId = 5
print(Status(statusId).name)
다음과 같은 Enum 이름 문자열을 가져올 수 있습니다.
Fruit(5).name
Enumint 값은 다음과 같습니다.
Fruit(5).value
다음과 같은 Enum 개체를 가져올 수 있습니다.
Fruit(5)
강의를 테스트합니다.
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
다음과 같이:
>>> Fruit(5)
<Fruit.Orange: 5>
>>> Fruit(5).name
'Orange'
>>> Fruit(5).value
5
>>> Fruit['Apple']
<Fruit.Apple: 4>
>>> Fruit['Apple'].value
4
>>> Fruit['Apple'].name
'Apple'
int에서 변환할 때 함수처럼 액세스합니다.
그리고 문자열에서 변환할 때는 대괄호로 액세스합니다.
언급URL : https://stackoverflow.com/questions/23951641/how-to-convert-int-to-enum-in-python
'sourcecode' 카테고리의 다른 글
$project가 있는 Mongo Aggregate 이름 바꾸기 필드? (0) | 2023.07.17 |
---|---|
쿼리 세트를 정렬하는 좋은 방법은 무엇입니까? - 장고 (0) | 2023.07.17 |
중첩된 사전의 항목에서 판다 데이터 프레임 구성 (0) | 2023.07.17 |
파이썬을 사용하여 어레이에서 특정 요소를 제거하는 방법 (0) | 2023.07.17 |
SQL 화학을 사용하여 새 데이터베이스를 만드는 방법은 무엇입니까? (0) | 2023.07.17 |