enum
•
열거형
•
고유한 상수값에 연결된 기호 이름의 집합체
•
열거형 멤버는 대문자로 사용
Enum형 만들기
from enum import Enum
class Color(Enum):
RED = (enum.auto(), "빨강")
BLUE = (enum.auto(), "파랑")
GREEN = (enum.auto(), "초록")
Solidity
복사
enum.auto()
•
자동으로 값을 순차 할당해주는 함수
class명.__members__
•
해당 클래스에 있는 상수명들
Enum형 함수형 API 선언
•
class로 정의하지 않고 함수형 api로 정의하는 방법
•
더 간단함
•
Enum(열거형 이름, 열거형 멤버 이름의 소스)
from enum import Enum
Color = Enum(value='Color', names='RED GREEN BLUE', start=1)
list(Color)
Python
복사
Enum 함수
•
.name = name 속성 접근
•
.value = value 속성 접근
Enum 파생 열거형
•
IntEnum
◦
Enum이 아닌 IntEnum을 상속
◦
IntEnum에선 대소 비교가 가능
◦
정수처럼 동작
from enum import IntEnum
class Color(IntEnum):
RED = 1
GREEN = 2
BLUE = 3
print(list(Color))
print(Color.RED < Color.BLUE)
# [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
# True
Python
복사
•
IntFlag
◦
정수처럼 동작
◦
IntFlag 멤버는 비트 연산자(&, |, ^, ~)를 사용하여 결합 가능
◦
결과도 여전히 IntFlag 멤버
from enum import IntFlag
class Permission(IntFlag):
R = 4
W = 2
X = 1
RW = Permission.R | Permission.W
print(RW)
print(int(RW))
print(Permission.R in RW)
print(Permission.X in RW)
# Permission.R|W
# 6
# True
# False
Python
복사
상수 이름 가져오기
import enum
class Rainbow(enum.Enum):
RED = (enum.auto(), "빨강")
ORANGE = (enum.auto(), "주황")
YELLOW = (enum.auto(), "노랑")
GREEN = (enum.auto(), "초록")
BLUE = (enum.auto(), "파랑")
INDIGO = (enum.auto(), "남색")
VIOLET = (enum.auto(), "보라")
# 1
lst1 = [] # 빈 리스트 선언
for e in Rainbow: # Rainbow에 있는 상수를 하나씩 추출
lst1.append(e.name) # 추출한 상수를 리스트에 추가
# 2
# 1. 리스트 선언 -> []
# 2. Rainbow에 있는 상수를 하나씩 추출 -> [for e in Rainbow]
# 3. 추출한 상수를 리스트에 추가 -> [e.name for e in Rainbow]
lst2 = [e.name for e in Rainbow]
print(lst1)
print(lst2)
Python
복사