선언하기
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(type(Color.GREEN))
print(Color.GREEN)
print(Color.GREEN.name)
// 출력
<enum 'Color'>
Color.GREEN
GREEN
반복하기 (이터레이션 지원)
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
for color in Color:
print(color)
// 출력
Color.RED
Color.GREEN
Color.BLUE
자동 값 사용하기 (auto)
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
print(list(Color))
// 출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
비교하기
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED is Color.RED)
print(Color.RED == Color.RED)
print(Color.RED is not Color.RED)
print(Color.RED != Color.RED)
// 출력
True
True
False
False
그렇지만 정수가 아니기 때문에 값 사이의 순서 비교는 지원되지 않는다. (IntEnum을 상속 받았다면 가능)
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED < Color.GREEN)
// 출력
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_9360/1484130010.py in <module>
6 BLUE = 3
7
----> 8 print(Color.RED < Color.GREEN)
TypeError: '<' not supported between instances of 'Color' and 'Color'
함수형 API 선언
Enum형을 class로 정의하지 않고 함수형 api로 간단하게 정의할 수 있다.
첫 번째 인자는 열거형의 이름이고, 두 번째 인자는 열거형 멤버 이름의 소스다.
from enum import Enum
Color = Enum(value='Color', names='RED GREEN BLUE', start=1)
list(Color)
// 출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
Enum 파생된 열거형
IntEnum
Enum이 아닌 IntEnum을 상속 받는다.
Enum에서는 대소 비교가 안되었지만 IntEnum형은 대소 비교가 가능하다 즉, IntEnum형은 정수처럼 동작하는 것이다.
from enum import IntEnum
class Color(IntEnum):
RED = 1
GREEN = 2
BLUE = 3
print(list(Color))
print(Color.RED < Color.BLUE)
// 출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
True
IntFlag
IntFlag도 int를 기반으로 한다. 차이점은 IntFlag 멤버는 비트 연산자(&, |, ^, ~)를 사용하여 결합할 수 있으며 결과는 여전히 IntFlag 멤버라는 것이다.
from enum import IntFlag
class Permission(IntFlag):
R = 4
W = 2
X = 1
RW = Permission.R | Permission.W
print(RW)
print(int(RW))
print(Permission.R in RW)
print(Permission.X in RW)
// 출력
Permission.R|W
6
True
False
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Python] 아스키 코드 (Ascii Code) 사용하기 (0) | 2024.08.05 |
---|---|
[Python] 포메팅 format (0) | 2024.07.31 |
[Python] Encrypt / Decrypt (0) | 2024.07.10 |
[Python] 비슷한 연산자의 차이 (is, ==, and, &, or, |) (0) | 2024.07.09 |
[Python] 문자열 관련 함수 총 정리 (0) | 2024.06.14 |