를 사용하는 파이썬 Enum 클래스가 있습 방법을 테스트하는 경우 열거형을 포함 특정 int 값을 사용하지 않고도/이 있을까요?
다음과 같은 클래스:
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
할 수 있는 방법에 대한 테스트 값을 6(반 true)거나 값 7(에서 false 를 반환)?
참고하는열거한
회원이라는 _value2member_map_
(는 문서화되지 않은 변경될 수 있습/제거에서 미래 python 버전):
print(Fruit._value2member_map_)
# {4: <Fruit.Apple: 4>, 5: <Fruit.Orange: 5>, 6: <Fruit.Pear: 6>}
테스트할 수 있습니다면 이 값에서의열거
에 대하여 이 지도:
5 in Fruit._value2member_map_ # True
7 in Fruit._value2member_map_ # False
당신이 원하지 않는 경우에 의존하는 이 기능을 대신 이 방법을 사용:
values = [item.value for item in Fruit] # [4, 5, 6]
또는(아마도 더 나은):를 사용하설정
;에서
연산자를 더 효율적이 될 것이다:
values = set(item.value for item in Fruit) # {4, 5, 6}
다음 테스트
5 in values # True
7 in values # False
has_value
클래스할 수 있습니다 추가 이 방법으로 당신의 클래스:
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
당신이 사용할 수 있Enum.__회원__
-*주문전 맵핑을 이름을 지원하는 도구이다.:
In [12]: 'Apple' in Fruit.__members__
Out[12]: True
In [13]: 'Grape' in Fruit.__members__
Out[13]: False
인지 여부를 확인하 it'sEnum. _value2member_map_
In[15]: Fruit._value2member_map_
Out[15]: {4: <Fruit.Apple: 4>, 5: <Fruit.Orange: 5>, 6: <Fruit.Pear: 6>}
In[16]: 6 in Fruit._value2member_map_
Out[16]: True
In[17]: 7 in Fruit._value2member_map_
Out[17]: False
지't.
를 사용하는 경우 열거,테스트할 수 있습니다 열거된
if isinstance(key, Fruit):
하지만 그렇지 않으면,try..은 pythonic 을 테스트하는 방법에 대한 열거. 실제로,어떠한 휴식에서 오리 입력 고정관념이라 할 수 있습니다.
의 올바른 pythonic,의 방법으로 테스트를 위한 int 에 IntEnum 는 이동을 제공하고를 잡으 ValueError 는 경우가 있's 실패입니다.
의 많은 솔루션을 제안은 위의 적극적으로 사용되지 않는 것이 허용되지 않으로 3.8("DeprecationWarning:를 사용하여 비 왜냐하면서 격리 검사를 올릴 것이 TypeError 에서는 파이썬 3.8")
는 경우에 당신은 정말 흥미에서 유지하는 코드는 현대,다음 사용할 수 있습니다
if key in Fruit: