열거형 클래스 사용
실제 개발에서는 상수를 정의하지 않고는 할 수 없습니다. 상수를 정의해야 할 때 대문자 변수를 사용하여 월과 같은 정수로 정의하는 방법도 있습니다.
JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12
물론 간단하고 빠르지만, 단점은 유형이 int이고 변수로 남아 있다는 것입니다.
좋은 방법 없을까요?
이때 클래스 유형을 정의하고 각 상수는 클래스의 유일한 인스턴스입니다. Python은 이 함수를 구현하기 위해 다음과 같이 Enum 클래스를 제공합니다.
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) # 遍历枚举类型 for name, member in Month.__members__.items(): print(name, '---------', member, '----------', member.value) # 直接引用一个常量 print('\n', Month.Jan)
출력 결과는 다음과 같습니다.
Enum을 사용하여 열거형 클래스를 직접 정의할 수 있음을 알 수 있습니다. 위의 코드에서는 월에 대한 열거형 Month를 생성합니다. 여기서 주목해야 할 것은 생성 매개변수입니다. 첫 번째 매개변수 Month는 열거형 클래스의 클래스 이름을 나타내고 두 번째 튜플 매개변수는 열거형의 값을 나타냅니다. 열거형 클래스는 물론, 열거형 클래스는 __members__ 메서드를 통해 모든 멤버를 탐색합니다. 한 가지 주목할 점은 member.value가 기본적으로 1부터 시작하여 멤버에 자동으로 할당되는 int 유형의 상수라는 것입니다. 게다가 Enum의 멤버는 모두 싱글톤이므로 인스턴스화하거나 변경할 수 없습니다