enum — 열거형 지원
enum — 열거형 지원
열거형(enumeration)은:
- 고유 값에 바인딩된 상징적 이름(멤버)의 집합입니다.
- 정의된 순서대로 그 정식(즉, 비-별칭) 멤버를 반환하도록 반복할 수 있습니다.
- call 구문을 사용해 값으로 멤버를 반환합니다.
- index 구문을 사용해 이름으로 멤버를 반환합니다.
열거형은 class 구문이나 함수 호출 구문으로 만듭니다 (3.4에서 추가).
본문
>>> from enum import Enum
>>> # class syntax
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
>>> # functional syntax
>>> Color = Enum('Color', [('RED', 1), ('GREEN', 2), ('BLUE', 3)])
class 구문으로 Enum을 만들 수 있지만 Enum은 일반 Python 클래스가 아닙니다. 용어: 클래스 Color는 열거형(enum)이고, Color.RED, Color.GREEN 등은 열거형 멤버(member)로 기능상 상수입니다. 멤버는 이름과 값을 가집니다(Color.RED의 이름은 RED, Color.BLUE의 값은 3).
모듈 내용
EnumType— Enum과 그 서브클래스의 타입(메타클래스). 3.11 이전에는EnumMeta라고 불렸으며 여전히 별칭으로 사용 가능합니다.Enum— 열거형 상수를 만드는 기본 클래스.IntEnum—int의 서브클래스이기도 한 열거형 상수를 만드는 기본 클래스.StrEnum—str의 서브클래스이기도 한 열거형 상수를 만드는 기본 클래스.Flag— 비트 연산으로 결합해도Flag멤버십을 잃지 않는 열거형 상수를 만드는 기본 클래스.IntFlag— 비트 연산으로 결합해도IntFlag멤버십을 잃지 않는 열거형 상수용 기본 클래스. 멤버는int의 서브클래스이기도 합니다.EnumCheck—CONTINUOUS,NAMED_FLAGS,UNIQUE값의 열거형으로,verify()와 함께 사용해 제약 조건을 확인합니다.FlagBoundary—STRICT,CONFORM,EJECT,KEEP값으로 잘못된 값 처리 방식을 세밀하게 제어합니다.auto— Enum 멤버에 대해 인스턴스는 적절한 값으로 대체됩니다.StrEnum은 멤버 이름의 소문자 버전을, 다른 Enum은 1부터 증가하는 값을 기본으로 합니다.property— Enum 멤버에 멤버 이름과 충돌하지 않는 속성을 허용합니다.unique— Enum 클래스 데코레이터로 한 값에 하나의 이름만 바인딩되도록 보장합니다.verify— 열거형에 사용자가 선택한 제약 조건을 검사하는 Enum 클래스 데코레이터.member,nonmember,global_enum— 멤버 여부를 제어하는 데코레이터들.show_flag_values(value)— 플래그에 포함된 모든 2의 거듭제곱 정수 리스트를 반환합니다.bin(num, max_bits=None)— 음수는 2의 보수로 표현하고 선행 비트가 항상 부호를 나타내는 점을 제외하면 내장bin()과 같습니다.
데이터 타입
Enum은 모든 열거형의 기본 클래스입니다. 주요 속성과 메서드:
name— Enum 멤버를 정의하는 데 사용된 이름.value— Enum 멤버에 주어진 값._name_,_value_— 멤버의 이름과 값._order_는 더 이상 사용되지 않으며 하위 호환성을 위해 유지됩니다._ignore_는 생성 중에만 사용되며 완료되면 열거형에서 제거됩니다._generate_next_value_(name, start, count, last_values)—auto가 반환하는 다음 값을 결정하는 정적 메서드. 표준Enum에서는 가장 높은 값 + 1을,Flag에서는 다음으로 높은 2의 거듭제곱을 선택합니다.__init__,__init_subclass__,_missing_,__dir__,__contains__,__getitem__,__iter__,__len__,__members__,__reversed__등.
범용 메서드와 데코레이터
@enum.unique— 열거형__members__에서 찾은 별칭으로ValueError를 발생시킵니다.@enum.member— 대상이 멤버가 되게 합니다.@enum.nonmember— 멤버가 되지 않게 합니다.@enum.global_enum— 멤버가 클래스 대신 모듈에 속하는 것으로 표시되게 str/repr을 변경합니다.
자체 기본 클래스를 만들고 싶다면 class MyIntEnum(int, Enum): pass처럼 int나 str 타입을 혼합해 만들거나 그 enum에서 __str__ 등을 재할당할 수 있습니다.