출처 : https://www.pythontutorial.net/python-oop/python-enum-auto/
Python enum auto
In this tutorial, you'll learn about the enum auto() function to generate unique values for enumeration members.
www.pythontutorial.net
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 |
댓글