제퍼넷 로고

Python 열거형: Python에서 열거형을 작성하는 방법 – KDnuggets

시간

Python 열거형: Python에서 열거형을 작성하는 방법
작성자 별 이미지
 

C++ 또는 Java와 같은 언어로 프로그래밍한 경우 열거형을 사용하여 명명된 상수를 만들었을 것입니다. 열거형은 요일, 학생 성적, 주문 상태 등과 같이 종종 관련된 고정된 수의 값 중 하나를 취하는 변수가 있을 때 유용합니다.

그러나 Python에는 명시적인 열거형 데이터 유형이 없습니다. 그러나 Python 표준 라이브러리의 enum 모듈을 사용하여 열거형을 만들 수 있습니다. 이 튜토리얼에서는 그 방법을 알려드립니다. 

시작하자!

Enum은 "열거(enumeration)"를 의미하며 미리 정의된 명명된 상수 집합으로 구성됩니다. 이러한 상수는 종종 관련되어 있습니다. 일반적인 예로는 1년의 월, 요일, 성적, 주문 및 작업 상태가 있습니다. 

요약하자면, 열거형은 기본적으로 관련 상수의 모음입니다. 여기서 각 상수에는 의미 있는 이름이 연결되어 있습니다.

Python에서는 다음을 사용하여 열거형을 만들 수 있습니다. 열거형 모듈 (우리는 곧 할 것입니다!)

열거형을 사용하는 이유

열거형을 사용하면 코드 명확성과 유지 관리 가능성이 향상됩니다. 방법은 다음과 같습니다. 

  • 열거형은 마법의 숫자나 문자열을 의미 있는 레이블로 대체하여 코드 명확성을 향상시킵니다. 또한 열거형 멤버의 이름이 목적을 전달하므로 코드를 더욱 자체적으로 문서화할 수 있습니다. 
  • 열거형은 관련 상수를 정의하고 관리하는 간단한 방법을 제공하여 코드 유지 관리성을 향상시킵니다. 
  • 열거형은 변수 할당을 유효한 열거형 값으로만 ​​제한함으로써 유형 안전성도 보장합니다. 
  • 열거형을 사용하면 관련 상수를 쉽게 반복하고 비교할 수 있습니다.

이제 Python에서 첫 번째 열거형을 만들어 보겠습니다.

우리는 TaskStatus 다음 네 가지 이름과 값을 사용하는 열거형:

 

Python 열거형: Python에서 열거형을 작성하는 방법
작성자 별 이미지
 

먼저 수입 Enum enum 모듈의 클래스를 사용하여 enum을 생성합니다. 

그런 다음 새 클래스를 정의합니다. TaskStatus 에서 상속하는 것 Enum 열거형을 생성합니다. 각 멤버는 다음과 같이 고유한 이름과 선택적 값으로 정의됩니다.

from enum import Enum
	 
class TaskStatus(Enum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2
    ABANDONED = -1

 

우리가 만드는 모든 열거형 멤버는 Enum 클래스의 인스턴스입니다. 전화로 확인하시면 됩니다 isinstance() 표시된 대로 기능:

print(isinstance(TaskStatus.TODO,Enum))

 

Output >>> True

 

다음의 모든 멤버를 출력해 보겠습니다. TaskStatus 열거형을 목록으로 캐스팅하여:

print(list(TaskStatus))

 

다음과 같은 결과가 나옵니다.

Output >>>

[<TaskStatus.TODO: 0>, <TaskStatus.IN_PROGRESS: 1>, <TaskStatus.DONE: 2>, <TaskStatus.ABANDONED: -1>]

 

모든 열거형 멤버는 name가치. 이는 다음과 같이 이름을 사용하여 열거형 멤버에 액세스할 수 있음을 의미합니다. TaskStatus.TODO. 또는 다음과 같이 값으로 액세스합니다. TaskStatus(0).

이제 우리는 간단한 것을 만들었습니다. TaskStatus enum, enum 멤버에 대한 반복과 같은 간단한 작업을 수행하는 방법을 알아보겠습니다.

열거형 반복

Python에서는 iterable을 사용하는 것과 거의 동일한 방식으로 열거형을 사용할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다. len() 열거형 멤버 수를 계산하는 함수:

num_statuses = len(TaskStatus)
print(num_statuses)

 

Output >>> 4

 

목록과 같은 Python 반복 가능 항목에서와 마찬가지로 열거형을 반복할 수도 있습니다. 다음 for 루프에서는 각 열거형 멤버의 이름과 값에 모두 액세스하고 이를 인쇄합니다.

for status in TaskStatus:
    print(status.name, status.value)

 

출력은 다음과 같습니다.

Output >>> 

TODO 0
IN_PROGRESS 1
DONE 2
ABANDONED -1

열거형으로 주문하기

예시에서 상태와 해당 숫자 값은 다음과 같습니다.

  • 할 일: 0
  • 진행 중: 1
  • 완료: 2
  • 포기됨: -1

그러나 다음을 사용하여 기본 순서를 사용할 수도 있습니다. auto() 도우미 기능. 그렇게 할 때 열거형에 'n'개의 멤버가 있으면 할당되는 값은 1부터 n까지입니다. 하지만 시작 값(예: k)을 전달할 수 있습니다. auto(k) 열거형은 k에서 시작하여 k + n까지 올라갑니다.

수정해보자 TaskStatus 표시된 열거형:

from enum import Enum, auto

class TaskStatus(Enum):
    TODO = auto()
    IN_PROGRESS = auto()
    DONE = auto()
    ABANDONED = auto()

 

이제 멤버를 인쇄해 보겠습니다.

print(list(TaskStatus))

 

예상대로 값이 1~4인 것을 볼 수 있습니다.

Output >>>

[<TaskStatus.TODO: 1>, <TaskStatus.IN_PROGRESS: 2>, <TaskStatus.DONE: 3>, <TaskStatus.ABANDONED: 4>]

이제 TaskStatus 우리가 가지고 있는 열거형입니다. 다음 버전의 열거형을 사용하여 작업 디렉터리에 task.py 파일을 만듭니다.

# task.py

from enum import Enum

class TaskState(Enum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2
    ABANDONED = -1

 

이름과 현재 상태가 있는 작업이 있다고 가정해 보겠습니다. 그리고 상태 간의 유효한 전환은 다음과 같습니다.

 

Python 열거형: Python에서 열거형을 작성하는 방법
작성자 별 이미지
 

를 만들어 보자 Task 수업:

class Task:
    def __init__(self, name, state):
        self.name = name
        self.state = state
    
    def update_state(self, new_state):
        # Define valid state transitions based on the current state
        valid_transitions = {
        	TaskState.TODO: [TaskState.IN_PROGRESS, TaskState.ABANDONED],
        	TaskState.IN_PROGRESS: [TaskState.DONE, TaskState.ABANDONED],
        	TaskState.DONE: [],
        	TaskState.ABANDONED: []
    	}
   	 
        # Check if the new state is a valid transition from the current state
        if new_state in valid_transitions[self.state]:
            self.state = new_state
        else:
            raise ValueError(f"Invalid state transition from {self.state.name} to {new_state.name}")

 

우리는이 update_status() 현재 상태를 고려하여 새 상태로의 전환이 유효한지 확인하는 메서드입니다. 유효하지 않은 전환의 경우 ValueError 예외가 발생합니다.

다음은 Task 클래스: TODO 상태의 "보고서 쓰기" 작업:

# Create a new task with the initial state "To Do"
task = Task("Write Report", TaskState.TODO)

# Print the task details
print(f"Task Name: {task.name}")
print(f"Current State: {task.state.name}")

 

Output >>>
Task Name: Write Report
Current State: TODO

 

작업 상태를 IN_PROGRESS로 업데이트하는 것은 유효한 상태 전환이므로 작동해야 합니다.

# Update the task state to "In Progress"
task.update_state(TaskState.IN_PROGRESS)
print(f"Updated State: {task.state.name}")

 

Output >>> Updated State: IN_PROGRESS

 

작업이 완료되면 상태를 DONE으로 업데이트할 수 있습니다.

# Update the task state to "DONE"
task.update_state(TaskState.DONE)
print(f"Updated State: {task.state.name}")

 

Output >>> Updated State: DONE

 

그러나 DONE을 TODO로 업데이트하는 등 상태를 유효하지 않은 상태로 업데이트하려고 하면 ValueError 예외가 발생합니다.

# Attempt to update the task state to an invalid state
task.update_state(TaskState.TODO)

 

다음은 DONE에서 TODO로의 잘못된 상태 전환으로 인해 발생한 ValueError의 역추적입니다.

Traceback (most recent call last):
  File "/home/balapriya/enums/task.py", line 46, in 
	task.update_state(TaskState.TODO)
  File "/home/balapriya/enums/task.py", line 30, in update_state
	raise ValueError(f"Invalid state transition from {self.state.name} to {new_state.name}")
ValueError: Invalid state transition from DONE to TODO

이 튜토리얼에서는 간단한 TaskStatus 열거형을 코딩하여 Python에서 열거형을 작성하는 방법을 배웠습니다. 열거형 멤버에 액세스하고 이를 반복하는 방법을 배웠습니다. 

또한 다음을 사용하기로 선택한 경우 기본 순서가 어떻게 작동하는지 배웠습니다. auto() 열거형 멤버의 값을 설정하는 도우미 함수입니다. 그런 다음 보다 유용한 예제에서 TaskStatus 열거형을 사용해 보았습니다. 

당신을 찾을 수 있습니다 GitHub의 코드 예제. 곧 다른 Python 튜토리얼에서 뵙겠습니다. 그때까지 즐거운 코딩 되세요!
 
 

발라 프리야 C 인도 출신의 개발자이자 테크니컬 라이터입니다. 그녀는 수학, 프로그래밍, 데이터 과학 및 콘텐츠 제작의 교차점에서 일하는 것을 좋아합니다. 그녀의 관심 분야와 전문 분야는 DevOps, 데이터 과학 및 자연어 처리입니다. 그녀는 읽기, 쓰기, 코딩, 커피를 즐깁니다! 현재 그녀는 자습서, 사용 방법 가이드, 의견 등을 작성하여 개발자 커뮤니티와 지식을 배우고 공유하는 작업을 하고 있습니다.

spot_img

최신 인텔리전스

spot_img