Programming

파이썬 열거 형 클래스에서 모든 값을 얻는 방법은 무엇입니까?

procodes 2020. 8. 19. 21:15
반응형

파이썬 열거 형 클래스에서 모든 값을 얻는 방법은 무엇입니까?


Enum4 라이브러리를 사용하여 다음과 같이 열거 형 클래스를 만듭니다.

class Color(Enum):
    RED = 1
    BLUE = 2

[1, 2]어딘가에 목록 으로 인쇄하고 싶습니다 . 이것을 어떻게 할 수 있습니까?


IntEnum 을 사용할 수 있습니다 .

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2


print(int(Color.RED))   # prints 1

int 목록을 얻으려면 :

enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]

다음을 수행 할 수 있습니다.

[e.value for e in Color]

어떤 유형의 값 으로든 Enum을 사용하려면 다음을 시도하십시오.
몇 가지 개선 사항으로 업데이트되었습니다 ... 팁으로 @Jeff에게 감사드립니다!

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 'GREEN'
    BLUE = ('blue', '#0000ff')

    @staticmethod
    def list():
        return list(map(lambda c: c.value, Color))

print(Color.list())

결과로:

[1, 'GREEN', ('blue', '#0000ff')]

그래서는 Enum__members__DICT을. @ozgur가 제안한 솔루션은 정말 최고이지만 더 많은 작업을 통해 동일한 작업을 수행 할 수 있습니다.

[color.value for color_name, color in Color.__members__.items()]

__members__당신이 어떤 미친 상황에서 ... 동적에 물건을 삽입하기를 원한다면 사전에 유용하게 사용할 수 있습니다.

[편집] 분명히 __members__사전이 아니라지도 프록시입니다. 즉, 항목을 쉽게 추가 할 수 없습니다.

그러나 당신은 ..과 같은 이상한 일 MyEnum.__dict__['_member_map_']['new_key'] = 'new_value'을 할 수 있고, MyEnum.new_key.... 과 같은 새로운 키를 사용할 수 있습니다 . 그러나 이것은 단지 구현 세부 사항 일 뿐이며 함께 연주해서는 안됩니다. 흑 마법은 엄청난 유지 비용으로 지불됩니다.


class enum.Enum는 모든 열거 요구 사항을 해결하는 클래스이므로 상속하고 자신의 필드를 추가하기 만하면됩니다. 그 이후부터는 속성을 호출하기 만하면됩니다. name& value:

from enum import Enum

class Letter(Enum):
   A = 1
   B = 2
   C = 3

print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}

@Jeff의 답변에 classmethod따라 열거 형에 동일한 코드를 재사용 할 수 있도록 a를 사용하도록 리팩토링했습니다 .

from enum import Enum

class ExtendedEnum(Enum):

    @classmethod
    def list(cls):
        return list(map(lambda c: c.value, cls))

class OperationType(ExtendedEnum):
    CREATE = 'CREATE'
    STATUS = 'STATUS'
    EXPAND = 'EXPAND'
    DELETE = 'DELETE'

print(OperationType.list())

생성 :

['CREATE', 'STATUS', 'EXPAND', 'DELETE']

iter () 함수를 사용할 수 있습니다.

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2
l=[]
for i in iter(Color):
    l.append(i.value)
print(l)

참고URL : https://stackoverflow.com/questions/29503339/how-to-get-all-values-from-python-enum-class

반응형