enum
enum은 서로 관련이 있는 여러 개의 상수 집합을 정의할 때 사용하는 모듈입니다.
enum 모듈은 python3.4 버전 부터 사용할 수 있습니다.
만약 날짜를 입력하면 그 날의 요일에 해당하는 메뉴를 반환하는 get_menu() 함수를 아래처럼 만들었습니다.
from datetime import date
def get_menu(input_date: date) -> str:
weekday = input_date.isoweekday() # 1: 월요일, 2: 화요일, ..., 7: 일요일
if weekday == 1:
menu = "김치찌개"
elif weekday == 2:
menu = "부대찌개"
elif weekday == 3:
menu = "순두부찌개"
elif weekday == 4:
menu = "스테이크"
elif weekday == 5:
menu = "치킨"
elif weekday == 6:
menu = "스프"
elif weekday == 7:
menu = "라면"
return menu
print(get_menu(date(2023, 3, 2))) # 스테이크
프로그래밍에서 상수로 선언하지 않은 숫자를 매직넘버라고 합니다.
위 프로그램에서도 1~7이라는 매직 넘버를 사용해 요일을 나타냈습니다. 이러한 매직넘버를 사용하면 코드의 가독성이 떨어집니다. 이 문제를 개선하기 위해서는 enum 라이브러리를 사용할 수 있습니다.
from datetime import date
from enum import IntEnum
class Week(IntEnum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
def get_menu(input_date: date) -> str:
menu = {
Week.MONDAY: "김치찌개",
Week.TUESDAY: "라면",
Week.WEDNESDAY: "부대찌개",
Week.THURSDAY: "스프",
Week.FRIDAY: "치킨",
Week.SATURDAY: "스테이크",
Week.SUNDAY: "삼겹살",
}
return menu[input_date.isoweekday()]
print(get_menu(date(2023, 3, 23))) # 스프
Week 클래스는 enum.IntEnum 을 상송하여 만든 Enum 자료형 입니다. 이렇게 Enum 자료형을 만들어 상수로 사용하면 유지보수에 유리하고 가독성이 좋아집니다.
print(Week.MONDAY.name) # MONDAY
print(Week.MONDAY.value) # 1
이렇게 Enum 자료형은 name과 value 속성으로 접근할 수 있습니다.
for week in Week:
print("{}:{}".format(week.name, week.value))
# MONDAY:1
# TUESDAY:2
# WEDNESDAY:3
# THURSDAY:4
# FRIDAY:5
# SATURDAY:6
# SUNDAY:7
for 문으로도 반복 할 수 있습니다.
'Python > Python' 카테고리의 다른 글
Python 라이브러리 - decimal (0) | 2023.05.16 |
---|---|
Python 라이브러리 - math (0) | 2023.05.16 |
Python 라이브러리 - pprint (0) | 2023.05.16 |
Python 라이브러리 - heapq (0) | 2023.05.16 |
Python 라이브러리 - collections (0) | 2023.05.11 |