출처 : https://www.pythontutorial.net/python-oop/python-enum-auto/
Introduction to the enum auto() function
다음 예제에서는 값이 1, 2 및 3인 세 개의 멤버가 있는 열거형을 정의합니다.
from enum import Enum
class State(Enum):
PENDING = 1
FULFILLED = 2
REJECTED = 3
이 예제에서는 열거형의 멤버에 정수 값을 수동으로 할당합니다.
더 편리하게하기 위해 Python 3.6은 열거형 멤버에 대한 고유 값을 자동으로 생성하는 enum 모듈에 auto() 도우미 클래스를 도입했습니다. 예를 들면 다음과 같습니다.
from enum import Enum, auto
class State(Enum):
PENDING = auto()
FULFILLED = auto()
REJECTED = auto()
def __str__(self):
return f'{self.name}({self.value})'
for i in State:
print(i)
작동 방식.
- 먼저 열거형 모듈에서 열거형 및 auto classe를 import합니다.
- 둘째, auto()를 호출하여 status 열거형의 각 멤버에 대해 고유한 값을 생성합니다.
기본적으로 auto() 클래스는 1부터 시작하는 정수 시퀀스를 생성합니다.
다음은 State 열거형 멤버의 값을 나타냅니다.
Output:
PENDING(1)
FULFILLED(2)
REJECTED(3)
How enum() auto works
기술적으로 auto()는 _generate_next_value_() 메서드를 호출하여 멤버에 대한 값을 생성합니다. 다음은 _generate_next_value_() 메서드의 구문입니다.
_generate_next_value_(name, start, count, last_values)
_generate_next_value_()에는 다음과 같은 매개 변수가 있습니다.
- name은 멤버의 이름
- start 는 멤버의 시작 값
- count는 생성된 열거형 멤버의 수( 별칭을 포함 )
- last_values은 열거형 멤버에 사용되는 모든 이전 값의 목록
기본적으로 _generate_next_value_()는 1부터 시작하는 정수 시퀀스에서 다음 숫자를 생성합니다.
그러나 Python은 향후 이 논리를 변경할 수 있습니다.
_generate_next_value_() 메서드를 overriding하여 고유한 값을 생성하는 사용자 지정 논리를 추가할 수 있습니다. 그러기 위해 모든 멤버를 정의하기 전에 _generate_next_value_() 메서드를 배치해야합니다.
다음은 _generate_next_value_() 메서드를 재정의하여 멤버의 이름을 사용하여 멤버에 대한 값을 생성하는 방법을 보여 줍니다.
from enum import Enum, auto
class State(Enum):
def _generate_next_value_(name, start, count, last_values):
return name.lower()
PENDING = auto()
FULFILLED = auto()
REJECTED = auto()
def __str__(self):
return f'{self.name}({self.value})'
for i in State:
print(i)
Output:
PENDING(pending)
FULFILLED(fulfilled)
REJECTED(rejected)
Summary
- enum auto() 클래스를 사용하여 열거형 멤버에 대한 고유한 값을 자동 생성합니다.
'Python Object-oriented Programming' 카테고리의 다른 글
Open-closed Principle (0) | 2023.04.04 |
---|---|
Single Responsibility Principle (0) | 2023.04.04 |
Customize and Extend Python Enum Class (0) | 2023.04.04 |
num aliases & @enum.unique Decorator (0) | 2023.04.04 |
enumeration (0) | 2023.04.04 |
댓글