Hello
See https://docs.python.org/3.11/howto/enum.html
Enum
Note:
It is iterable, i.e., supports
__iter__
name and value
alias and
@unique
.
__members__
.
str
andrepr
.
auto
./code/hello/ex1.py
1from enum import Enum
2
3
4class Color(Enum):
5 RED = 1
6 GREEN = 2
7 BLUE = 3
8 # BLUE = 4 # TypeError: Attempted to reuse key: 'BLUE'
9 ALIAS_FOR_RED = 1 # Use @unique to disallow this
10 MAX_COLOR = 4 # Note the naming convention
11
12
13assert isinstance(Color.RED, Color)
14
15assert str(Color(1)) == "Color.RED"
16assert str(repr(Color(1))) == "<Color.RED: 1>"
17
18assert Color.RED.name == "RED"
19assert Color.BLUE.value == 3
20
21print(list(Color))
22print(type(list(Color)[0]))
23for c in Color:
24 print(c, type(c))
25
26"""
27[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>, <Color.MAX_COLOR: 4>]
28<enum 'Color'>
29Color.RED <enum 'Color'>
30Color.GREEN <enum 'Color'>
31Color.BLUE <enum 'Color'>
32Color.MAX_COLOR <enum 'Color'>
33"""
34
35assert Color(1) == Color.RED
36assert Color["RED"] == Color.RED
37assert Color["ALIAS_FOR_RED"] == Color.RED
38
39print(Color.__members__)
40"""
41{'RED': <Color.RED: 1>, 'GREEN': <Color.GREEN: 2>, 'BLUE': <Color.BLUE: 3>, 'ALIAS_FOR_RED': <Color.RED: 1>, 'MAX_COLOR': <Color.MAX_COLOR: 4>}
42"""
Flag
./code/hello/ex2.py
1from enum import Flag
2
3
4class Weekday(Flag):
5 MONDAY = 1 << 0
6 TUESDAY = 1 << 1
7 WEDNESDAY = 1 << 2
8 THURSDAY = 1 << 3
9 FRIDAY = 1 << 4
10 SATURDAY = 1 << 5
11 SUNDAY = 1 << 6
12
13
14assert Weekday.MONDAY.value == 1
15assert Weekday.TUESDAY.value == 2
16assert Weekday.WEDNESDAY.value == 4
17assert Weekday.THURSDAY.value == 8
18assert Weekday.FRIDAY.value == 16
19assert Weekday.SATURDAY.value == 32
20assert Weekday.SUNDAY.value == 64
21
22weekend = Weekday.SATURDAY | Weekday.SUNDAY
23print(weekend) # Weekday.SUNDAY|SATURDAY
24print(repr(weekend)) # <Weekday.SUNDAY|SATURDAY: 96>
25assert Weekday.SATURDAY in weekend
26assert Weekday.SUNDAY in weekend
27assert Weekday.MONDAY not in weekend
auto
./code/hello/ex3.py
1from enum import Enum, Flag, auto
2
3
4class Weekday(Flag):
5 MONDAY = auto() # start from 1
6 TUESDAY = auto()
7 WEDNESDAY = auto()
8 THURSDAY = auto()
9 FRIDAY = auto()
10 SATURDAY = 128
11 SUNDAY = auto()
12
13
14assert Weekday.MONDAY.value == 1
15assert Weekday.TUESDAY.value == 2
16assert Weekday.WEDNESDAY.value == 4
17assert Weekday.THURSDAY.value == 8
18assert Weekday.FRIDAY.value == 16
19assert Weekday.SATURDAY.value == 128
20assert Weekday.SUNDAY.value == 256
21
22
23class Color(Enum):
24 RED = auto() # start from 1
25 GREEN = auto()
26 BLUE = auto()
27 YELLOW = 10
28 WHITE = auto()
29
30
31assert Color.RED.value == 1
32assert Color.GREEN.value == 2
33assert Color.BLUE.value == 3
34assert Color.YELLOW.value == 10
35assert Color.WHITE.value == 11