2016-08-01 2 views
2

나는 많이 열거를 좋아하고 나는 다음을 수행 싶습니다 :대안은

class Color(Enum): 
    green = 0 
    red = 1 
    blue = 1 

for color in Color: 
    print(color.name) 
    print(color.value) 

당신이 볼 수 있듯이, Color 클래스에서 중복 값이 ​​있습니다. 이 경우 iterable, name, value를 지원하는 어떤 클래스 대안을 사용할 수 있습니까?

+0

http://stackoverflow.com/a/1695250/5399734 및 그 질문에 대한 다른 좋은 답변을보십시오. –

답변

1

당신은 당신이 red의 별칭 인 blue없이 Color.redColor.blue을 가질 수있는 방법을 묻는?

그렇다면, 당신은 aenum1 라이브러리를 사용하고자하는 것입니다 그리고 그것은 같은 것을 보일 것이다

from aenum import Enum, NoAlias 

# python 3 
class Color(Enum, settings=NoAlias): 
    green = 0 
    red = 1 
    blue = 1 

# python 2 
class Color(Enum): 
    _order_ = 'green rud blue' 
    _settings_ = NoAlias 
    green = 0 
    red = 1 
    blue = 1 

그리고 사용 :

for color in Color: 
    print(color.name) 
    print(color.value) 

# green 
# 0 
# red 
# 1 
# blue 
# 1 

NoAlias를 사용하는 단점이있다 값별 조회가 비활성화되어 있습니다 (Color(1)을 수행 할 수 없음).


1 공개 : 나는 Python stdlib Enum의 저자는 enum34 backportAdvanced Enumeration (aenum) 라이브러리입니다.

+0

굉장!, "enum"내장 "Enum"을 사용했지만 NoAlias ​​설정의 "aenum"에서 Enum이 있다는 것을 모릅니다. 고맙습니다! – user1502776

+0

@ user1502776 : 클래스, 클래스의 길이 등을 반복하는 다른'Enum' 아이템이 필요 없다면'aenum'의'NamedConstant' 클래스를 사용하는 것이 좋습니다. –