본문 바로가기
Python Object-oriented Programming

enum-auto

by 자동매매 2023. 4. 4.

출처 : 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

댓글