Enum4 라이브러리를 사용하여 다음과 같이 enum 클래스를 만들고 있습니다.
class Color(Enum):
RED = 1
BLUE = 2
[1, 2]
어딘가에 목록 으로 인쇄하고 싶습니다 . 어떻게하면 되나요?
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]
a = [(int(v), str(v)) for v in Color]
다음 print(a)
.
[(color.value, color.name) for color 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')]
@classmethod
인스턴스를 만들어야한다고 생각 합니다 Color
. 이것이 바로 staticmethod
여기에 올바른 선택 인 것 같습니다.
@classmethod
하고 사용할 수 있습니다 return list(map(lambda c: c.value, cls))
.
@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']
그래서는 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
... 와 같은 새로운 키를 사용할 수 는 있지만 이것은 구현 세부 사항 일뿐이며 함께 연주해서는 안됩니다. 블랙 매직은 유지 보수 비용이 많이 듭니다.
__members__
있습니까? 확장 을 허용 하여 새 Enum
멤버 를 작성 하는 흥미로운 방법 입니다. ... btw, 테이블에 새로운 ( 나에게 ) 속성을 가져 오기 위해 투표했습니다 .
사용 _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 값을 반환합니다