sourcecode

파이썬에서 int를 Enum으로 변환하는 방법은 무엇입니까?

codebag 2023. 7. 17. 20:58
반응형

파이썬에서 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)그 후에 접속합니다.nameEnum객체:

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

반응형