enum — 열거형 지원

enum — 열거형 지원

열거형(enumeration)은:

  • 고유 값에 바인딩된 상징적 이름(멤버)의 집합입니다.
  • 정의된 순서대로 그 정식(즉, 비-별칭) 멤버를 반환하도록 반복할 수 있습니다.
  • call 구문을 사용해 값으로 멤버를 반환합니다.
  • index 구문을 사용해 이름으로 멤버를 반환합니다.

열거형은 class 구문이나 함수 호출 구문으로 만듭니다 (3.4에서 추가).

출처: Python documentation

본문

>>> 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 — 열거형 상수를 만드는 기본 클래스.
  • IntEnumint의 서브클래스이기도 한 열거형 상수를 만드는 기본 클래스.
  • StrEnumstr의 서브클래스이기도 한 열거형 상수를 만드는 기본 클래스.
  • Flag — 비트 연산으로 결합해도 Flag 멤버십을 잃지 않는 열거형 상수를 만드는 기본 클래스.
  • IntFlag — 비트 연산으로 결합해도 IntFlag 멤버십을 잃지 않는 열거형 상수용 기본 클래스. 멤버는 int의 서브클래스이기도 합니다.
  • EnumCheckCONTINUOUS, NAMED_FLAGS, UNIQUE 값의 열거형으로, verify()와 함께 사용해 제약 조건을 확인합니다.
  • FlagBoundarySTRICT, 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__ 등을 재할당할 수 있습니다.

더 알아보기 (Learn more)