본문 바로가기
파이썬

파이썬 try / catch를 사용하지 않고 int 값이 Python Enum에 있는지 어떻게 테스트합니까?

by º기록 2020. 10. 21.
반응형

Python Enum 클래스를 사용하여 try / catch를 사용하지 않고 Enum에 특정 int 값이 포함되어 있는지 테스트하는 방법이 있습니까?

다음 클래스로 :

from enum import Enum

class Fruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

값 6 (참 반환) 또는 값 7 (거짓 반환)을 어떻게 테스트 할 수 있습니까?

 

해결 방법

 

Enum 에는 _value2member_map _ 이라는 멤버가 있습니다 (이는 문서화되지 않았으며 향후 Python 버전에서 변경 / 제거 될 수 있음).

print(Fruit._value2member_map_)
# {4: <Fruit.Apple: 4>, 5: <Fruit.Orange: 5>, 6: <Fruit.Pear: 6>}

이지도에 대해 값이 Enum 에 있는지 테스트 할 수 있습니다.

5 in Fruit._value2member_map_  # True
7 in Fruit._value2member_map_  # False

이 기능에 의존하지 않으려면 다음 방법을 사용할 수 있습니다.

values = [item.value for item in Fruit]  # [4, 5, 6]

또는 (아마 더 좋을 것입니다) : set 을 사용하세요; in 연산자가 더 효율적입니다.

values = set(item.value for item in Fruit)  # {4, 5, 6}

그런 다음 테스트

5 in values  # True
7 in values  # False

그런 다음 이것을 클래스에 메서드로 추가 할 수 있습니다.

class Fruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

    @classmethod
    def has_value(cls, value):
        return value in cls._value2member_map_ 

print(Fruit.has_value(5))  # True
print(Fruit.has_value(7))  # False

값이 아닌 이름을 테스트하려면 _member_names _ 를 사용합니다.

'Apple' in Fruit._member_names_  # True
'Mango' in Fruit._member_names_  # False

 

참조 페이지 https://stackoverflow.com/questions/43634618

 

 

반응형

댓글