자바에서 사용하던 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
'[개발] 언어 > Python' 카테고리의 다른 글
python3 - [자료구조] Dictionary를 알아보자 (0) | 2021.06.15 |
---|---|
python3 - hasattr() 함수를 알아보자. (0) | 2021.06.12 |
python3 - decorator 패턴 (0) | 2021.06.11 |
python3 - String(문자열) 사용하기 (0) | 2021.06.09 |
OEmbed API 액세스 토큰 에러 코드:190 (0) | 2021.06.06 |