반응형
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 __getitem__ 메서드 이해 (0) | 2020.10.21 |
---|---|
파이썬 BeautifulSoup : 중첩 된 <ul>을 포함하는 <ul> 목록에서 모든 <li>를 어떻게 추출합니까? (0) | 2020.10.21 |
파이썬 requirements.txt 대 setup.py (0) | 2020.10.21 |
파이썬에서 문자열에 대한 객체 (0) | 2020.10.21 |
파이썬 Python 목록 항목에서 구두점 제거 (0) | 2020.10.20 |
댓글