일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 개발자도서
- 도커
- python
- 한빛미디어
- 유데미
- command
- 프로그래밍
- vscode
- 가상환경
- docker
- 개발
- ai
- 명령어
- 개발자
- 위젯
- 수학 애니메이션
- 유데미 러닝크루
- flutter
- linux
- Code Generation
- 파이썬
- 플러터
- 다트
- 책
- manim
- 디자인패턴
- 도서
- 코딩
- 리눅스
- dart
- Today
- Total
승상의 코딩 블로그
파이썬 - Enum 본문
파이썬 3.4 부터 Enum 이 추가되었다. 기존에는 Enum 을 직접 구현하여 썻었는데, 추가됨에 따라 편리해졌다.
Enum 을 사용하면, 범위에 대한 경계선을 만들 수 있다.
이를 통해, 코드의 가독성도 높일 수 있다.
또한 코드 완성(힌트) 를 통해 코드 작성 시 생길 수 있는 에러도 줄일 수 있다.
기본
from enum import Enum
class Fruit(Enum):
APPLE = 1
BANANA = 2
ORANGE = 3
클래스 형태로 위와 같이 Enum 을 사용할 수 있다.
>>> Fruits.APPLE
<Fruits.APPLE: 1>
>>> Fruits.APPLE.name
'APPLE'
>>> Fruits.APPLE.value
1
클래스에서 선언한 열거형 멤버는 Fruits.APPLE 로 접근하여 사용할 수 있다.
열거형 멤버는 name 과 value 를 가지고 있다.
Fruits.APPLE 은 name 으로 'APPLE' 를 가지고 있고, value 로 1 을 가지고 있다.
name 과 value는 Fruits.APPLE.name 과 Fruits.APPLE.value 로 사용할 수 있다.
추가로 열거형에 간단히 값을 할당하는 방법으로는 아래 두 방법이 있다.
from enum import Enum, auto
# auto 를 통해 자동 할당.
class Fruits(Enum):
APPLE = auto()
BANANA = auto()
ORANGE = auto()
# range 를 통한 할당
class Fruits(Enum):
APPLE, BANANA, ORANGE = range(1,4)
값을 자동으로 할당하고 싶다면 auto 를 사용하면 된다. 1 부터 할당된다.
range 를 통해서도 값을 할당할 수도 있다.
for 문
>>> for item in Fruits:
... print(item)
Fruits.APPLE
Fruits.BANANA
Fruits.ORANGE
for 문을 사용하여 반복문에 사용할 수 있다. 반복시 열거형 멤버자체가 반환된다.
열거형 멤버 확인
>>> print(Fruits.__members__)
{'APPLE': <Fruits.APPLE: 1>, 'BANANA': <Fruits.BANANA: 2>, 'ORANGE': <Fruits.ORANGE: 3>}
__member__ 를 통해 각 열거형 멤버가 어떤 것이 있는지 파악할 수 있다.
간편 사용방법
class Fruits(Enum):
APPLE = auto()
BANANA = auto()
ORANGE = auto()
def __eq__(self, value):
return self.name == value
# 기존에는 name 을 통해 변수의 이름을 가져올 수 있었다.
>>> Fruits.APPLE.name == "APPLE"
True
# __eq__ 함수를 통해 "==" 연산시 일어나는 결과를 변경할 수 있다.
# "==" 비교시 name 을 추가로 기입하지 않아도 된다.
# 만약, __eq__ 함수의 로직을 추가해주지 않았다면, 아래 결과는 False가 뜬다.
>>> Fruits.APPLE == "APPLE"
True
Enum 을 쓰다보면, 열거형 멤버의 이름(name)을 사용하여 값을 비교하는 경우가 생길 수 있다.
만약, Fruits 의 APPLE 의 이름을 문자열 "APPLE" 과 비교한다면, Fruits.APPLE.name == "APPLE" 로 써야하는 불편함이 있다.
이때, 필요연산에 따라 적절한 함수(여기서는 __eq__)를 정의 해주면, Fruits.APPLE == "APPLE" 로 연산 사용할 수 있다.
'Python (파이썬)' 카테고리의 다른 글
self 의 역할 (함수의 메모리) (0) | 2023.01.23 |
---|---|
파이썬 - dataclass(데이터클래스) (0) | 2022.12.31 |
파이썬 - Type Hint(or Type Annotation) 를 사용하는 이유 (2) | 2022.12.25 |
파이썬 - 왈러스 연산자(Walrus Operator) := (0) | 2022.09.25 |
파이썬에서 가상환경 사용하기 (venv 사용) (0) | 2022.09.15 |