728x90
반응형
질문 : 파이썬에서 '열거 형'을 어떻게 표현할 수 있습니까?
저는 주로 C # 개발자이지만 현재 Python으로 프로젝트를 진행하고 있습니다.
파이썬에서 Enum에 해당하는 것을 어떻게 나타낼 수 있습니까?
답변
PEP 435에 설명 된대로 열거 형 이 Python 3.4에 추가되었습니다. 또한 pypi 에서 3.3, 3.2, 3.1, 2.7, 2.6, 2.5 및 2.4로 백 포트되었습니다.
고급 열거 기술이 시도를 위해 aenum 라이브러리 (2.7, 3.3 이상, 동일 저자 enum34
. 코드는 당신이 필요합니다 py2 및 py3, 예를 들어 사이에 완벽하게 호환되지 않습니다 __order__
파이썬 2 ).
enum34
를 사용하려면$ pip install enum34
aenum
을 사용$ pip install aenum
enum
(숫자 없음)을 설치하면 완전히 다른 호환되지 않는 버전이 설치됩니다.
from enum import Enum # for enum34, or the stdlib version
# from aenum import Enum # for the aenum version
Animal = Enum('Animal', 'ant bee cat dog')
Animal.ant # returns <Animal.ant: 1>
Animal['ant'] # returns <Animal.ant: 1> (string lookup)
Animal.ant.name # returns 'ant' (inverse lookup)
또는 동등하게 :
class Animal(Enum):
ant = 1
bee = 2
cat = 3
dog = 4
이전 버전에서 열거 형을 수행하는 한 가지 방법은 다음과 같습니다.
def enum(**enums):
return type('Enum', (), enums)
다음과 같이 사용됩니다.
>>> Numbers = enum(ONE=1, TWO=2, THREE='three')
>>> Numbers.ONE
1
>>> Numbers.TWO
2
>>> Numbers.THREE
'three'
다음과 같이 자동 열거를 쉽게 지원할 수도 있습니다.
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
다음과 같이 사용됩니다.
>>> Numbers = enum('ZERO', 'ONE', 'TWO')
>>> Numbers.ZERO
0
>>> Numbers.ONE
1
값을 다시 이름으로 변환하는 지원은 다음과 같이 추가 할 수 있습니다.
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
이것은 그 이름을 가진 모든 것을 덮어 쓰지만 출력에서 열거 형을 렌더링하는 데 유용합니다. 역 매핑이 존재하지 않으면 KeyError가 발생합니다. 첫 번째 예 :
>>> Numbers.reverse_mapping['three']
'THREE'
mypy를 사용하는 경우 "열거 형"을 표현하는 또 다른 방법은 Literal 입니다.
예를 들면
from typing import Literal #python >=3.8
from typing_extensions import Literal #python 2.7, 3.4-3.7
Animal = Literal['ant', 'bee', 'cat', 'dog']
def hello_animal(animal: Animal):
print(f"hello {animal}")
hello_animal('rock') # error
hello_animal('bee') # passes
출처 : https://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬에서 큰 파일의 줄 수를 간단하게 얻는 방법 (0) | 2021.12.07 |
---|---|
파이썬에서 '//' 연산자 (0) | 2021.12.07 |
Python으로 Pandas에서 CSV 파일을 읽을 때 UnicodeDecodeError (0) | 2021.12.05 |
파이썬에서 딕셔너리 키를 리스트로 반환하는 방법 (0) | 2021.12.05 |
Python 및 pip, 사용 가능한 모든 버전의 패키지 나열하는 방법 (0) | 2021.12.05 |