본문 바로가기
[개발] 언어/Python

python3 enum 사용하기

by Devsong26 2021. 6. 10.

자바에서 사용하던 enum을 파이썬에도 사용할 수 있을지 의문이었다.

찾아보니 자바의 클래스처럼 키워드로 사용하는 것이 아닌 매개변수로 Enum 클래스를 상속받아 파이썬 클래스를 만드는 것이었다.

 

파이썬3 enum을 살펴보자.

 

Format

기본적인 예시는 아래와 같다.

import enum

class Flower(enum.Enum):
    rose = "장미"
    cosmos = "코스모스"
    tulip = "튤립"
    alias_tulip = "튤립"
    
print(Flower.rose.value) # 장미
print(Flower.cosmos.value) # 코스모스
print(Flower.tulip.value) # 튤립
print(Flower.alias_tulip) # Flower.tulip

만약 중복값이 정의될 경우(별칭), 먼저 정의된 멤버를 반환합니다.

단, 이미 정의된 어트리뷰트(다른 멤버, 메서드 등)와 같은 이름의 멤버를 만들려고 하거나 멤버와 같은 이름의 어트리뷰트를 만들려는 시도는 허용되지 않습니다.

 

OrderedEnum

순서 있는 열거형

from enum import Enum

class OrderedEnum(Enum):
    def __ge__(self, other):
        if self.__class__ is other.__class__:
            return self.value >= other.value
        return NotImplemented
    def __gt__(self, other):
        if self.__class__ is other.__class__:
            return self.value > other.value
        return NotImplemented
    def __le__(self, other):
        if self.__class__ is other.__class__:
            return self.value <= other.value
        return NotImplemented
    def __lt__(self, other):
        if self.__class__ is other.__class__:
            return self.value < other.value
        return NotImplemented
        
class Grade(OrderedEnum):
    A = 5
    B = 4
    C = 3
    D = 2
    F = 1
    
print(Grade.A < Grade.B)

 

이터레이션

import enum

class Flower(enum.Enum):
    rose = "장미"
    cosmos = "코스모스"
    tulip = "튤립"
    alias_tulip = "튤립"
    
print(list(Flower))

for k, v in Flower.__members__.items():
    print(k, v, v.value)
열거형 멤버를 이터레이트 해도 별칭은 제공되지 않습니다.
특수 어트리뷰트 __members__는 이름에서 멤버로의 읽기 전용 순서 있는 매핑입니다.
별칭을 포함하여, 열거형에 정의된 모든 이름을 포함합니다

 

비교

import enum

class Flower(enum.Enum):
    rose = "장미"
    cosmos = "코스모스"
    tulip = "튤립"
    alias_tulip = "튤립"
    
print(Flower.rose is Flower.rose) # True
print(Flower.rose is Flower.cosmos) # False
print(Flower.tulip is Flower.alias_tulip) # True
열거형 멤버는 아이덴티티로 비교됩니다.

 

 


더 많은 내용을 보시려면 아래를 참고하세요.


Reference

https://docs.python.org/ko/3/library/enum.html