auto()enum 모듈에서 제공하는 기능EnumEnum을 만들 때는 직접 값을 지정한다.auto() 를 사용하면 python이 알아서 값을 정해준다.from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
print(Color.RED.value) # 1
print(Color.GREEN.value) # 2
print(Color.BLUE.value) # 3
auto()가 자동으로 1, 2, 3을 할당해준다.Enum은 기본적으로 정수 값을 가지기 때문에 auto()를 쓰면 1부터 시작해서 1씩 증가하는 값이 들어간다.Enumclass MyEnum(Enum):
A = 10
B = auto()
C = auto()
print(MyEnum.A.value) # 10
print(MyEnum.B.value) # 11
print(MyEnum.C.value) # 12
A=10 으로 설정했기 때문에 auto()는 그 다음 숫자인 11, 12를 자동으로 넣어준다.auto() 를 활용한 Enum 확장auto()를 사용하면 항상 일관된 방식으로 값이 자동 설정되기 때문에, 새로운 멤버를 추가할 때 실수할 가능성이 줄어즌다. class Status(Enum):
PENDING = auto()
IN_PROGRESS = auto()
COMPLETED = auto()
# 나중에 새로운 상태 추가하기 쉬움
class ExtendedStatus(Status):
FAILED = auto()
print(ExtenedeSttatus.FAILED.value) # 4 (자동 증가)
auto()를 쓰면 자동 설정되어 유지보수가 편리하다. StrEnum + autofrom enum import StrEnum, auto
class OpenAIChatModelsEnum(StrEnum):
GPT4O = auto()
GTP4O_MINI = auto()
print(OpenAIChatModelsEnum.GPT4O.value) # "GPT4O"
print(OpenAIChatModelsEnum.GPT4O_MINI.value) # "GPT4O_MINI"
Enum에서는 숫자가 자동으로 들어가지만 StrEnum 에서는 멤버 이름을 그대로 문자열 값으로 설정한다.StrEnum 의 확장Enum을 추가하면서 기존 값과 비교해야 할 때이다.class BaseStatus(StrEnum):
SUCCESS = "SUCCESS"
ERROR = "ERROR"
class ExtendedStatus(BaseStatus):
TIMEOUT = "TIMEOUT"
RETRY = "RETRY"
print(ExtendedStatus.TIMEOUT in BaseStatus) # False (BaseStatus에는 없음)
print(ExtendedStatus.SUCCESS in BaseStatus) # True (BaseStatus에 있음)
BaseStatus)와 새로운 상태(ExtendedStatus)를 구분할 수 있다. StrEnum은 auto() 가 그냥 멤버 이름을 값으로 설정하므로 확장할 필요가 없고, 새로운 StrEnum을 만들고 직접 값을 넣는게 더 직관적일 수 있다. auto()직접 값 지정
class MyEnum(StrEnum):
A = "Apple"
B = "Banana"
print(MyEnum.A.value) # "Apple"
print(MyEnum.B.value) # "Banana"
auto()
class MyEnum(StrEnum):
A = auto()
B = auto()
print(MyEnum.A.value) # "A"
print(MyEnum.B.value) # "B"
auto() 사용예를 들어서 GPT4O 라는 값이 아니라 gpt-4o 처럼 다른 값을 쓰고 싶다면 auto() 대신에 직접 값을 입력한다.