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 and repr.

  • 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