[python] python enum 클래스에서 모든 값을 얻는 방법은 무엇입니까?

Enum4 라이브러리를 사용하여 다음과 같이 enum 클래스를 만들고 있습니다.

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

정수 목록을 얻으려면 :

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')]


답변

@Jeff의 답변을 바탕으로 classmethod모든 코드에 동일한 코드를 재사용 할 수 있도록 리팩토링했습니다 .

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']


답변

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}


답변

그래서는 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… 와 같은 새로운 키를 사용할 수 는 있지만 이것은 구현 세부 사항 일뿐이며 함께 연주해서는 안됩니다. 블랙 매직은 유지 보수 비용이 많이 듭니다.


답변

사용 _member_names_이 즉, 단지 이름 인 경우 빠른 쉽게 결과를

Color._member_names_

또한 _member_map_요소의 순서가 지정된 사전을 반환합니다. 이 함수는를 반환 collections.OrderedDict당신이 가진, 그래서 Color._member_names_.items()Color._member_names_.values()함께 플레이 할 수 있습니다. 예 :

return list(map(lambda x: x.value, Color._member_map_.values()))

유효한 모든 Color 값을 반환합니다