Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Enum ใน Python: สร้าง Enumeration ด้วย enum Module

enum module (Python 3.4+) ให้การสร้าง Enumeration - ชุดค่าคงที่ที่มีชื่อและค่าเฉพาะ ใช้แทน magic numbers/strings

สร้าง Enum พื้นฐาน

from enum import Enum

class Language(Enum):
    PYTHON = 1
    JAVA = 2
    CPP = 3
    RUBY = 4

การเข้าถึง Members

>> Language.PYTHON


>>> print(Language.PYTHON)
Language.PYTHON

>>> repr(Language.PYTHON)
''

>>> Language.PYTHON.name   # 'PYTHON'
>>> Language.PYTHON.value  # 1

Iteration

>> for lang in Language:
...     print(lang.name, lang.value)
PYTHON 1
JAVA 2
CPP 3
RUBY 4

Lookup by Value / Name

>> Language(3)


>>> Language['JAVA']

Comparison

>> x = Language(2)
>>> y = Language(4)
>>> x is y
False
>>> x == Language.JAVA
True
>>> x == 2  # False! Enum ไม่เท่ากับ int โดยตรง
False

Duplicate Values (Aliases)

class Language(Enum):
    PYTHON = 1
    JAVA = 2
    CPP = 3
    RUBY = 4
    CPLUSPLUS = 3  # alias ของ CPP

>>> Language.CPP

>>> Language.CPLUSPLUS
  # ชี้ไป member แรกที่มีค่า 3
>>> Language(3)

@unique - ห้ามซ้ำค่า

from enum import Enum, unique

@unique
class Language(Enum):
    PYTHON = 1
    JAVA = 2
    CPP = 3
    RUBY = 4
    CPLUSPLUS = 3  # ValueError: duplicate values found

IntEnum - เป็น subclass ของ int

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 2
    HIGH = 3

>>> Priority.HIGH > Priority.LOW
True
>>> Priority.HIGH + 10
13
>>> [Priority.LOW, Priority.HIGH]  # สามารถ sort ได้
[, ]

Auto Values

from enum import Enum, auto

class Color(Enum):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

>>> list(Color)
[, , ]

เมื่อไหร่ควรใช้ Enum?

  • State machines, status codes
  • Configuration options
  • API constants
  • ทุกที่ที่มีค่าคงที่จำกัดกลุ่ม