Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Enum trong Python: Enumeration type an toàn

enum (Python 3.4+) cung cấp kiểu liệt kê (enumeration) - tập hợp tên tượng trưng gắn với giá trị hằng số duy nhất. Thay thế magic numbers/strings bằng tên có ý nghĩa.

Định nghĩa Enum cơ bản

import enum

class Day(enum.Enum):
    SUN = 1
    MON = 2
    TUE = 3
    WED = 4
    THU = 5
    FRI = 6
    SAT = 7

Truy cập thành viên

print(Day.MON)           # Day.MON
print(repr(Day.SUN))     # 
print(type(Day.MON))     # 
print(Day.TUE.name)      # TUE
print(Day.TUE.value)     # 3

Duyệt Enum (Iterable)

for day in Day:
    print(day)
# Day.SUN
# Day.MON
# ...
# Day.SAT

Hashable - Dùng làm key dict

gods = {
    Day.SUN: "Sun God",
    Day.MON: "Moon God"
}
print(gods == {Day.SUN: "Sun God", Day.MON: "Moon God"})  # True

Truy cập theo tên hoặc giá trị

# Theo tên
print(Day['MON'])  # Day.MON

# Theo giá trị
print(Day(1))      # Day.SUN

So sánh Enum

class Day(enum.Enum):
    SUN = 1
    MON = 2
    TUE = 1  # Giá trị trùng SUN

print(Day.SUN == Day.TUE)   # True (so sánh value)
print(Day.SUN is Day.TUE)   # False (khác identity)
print(Day.MON != Day.TUE)   # True

Enum nâng cao: auto(), IntEnum, Flag

# Tự động gán giá trị
class Color(enum.Enum):
    RED = enum.auto()
    GREEN = enum.auto()
    BLUE = enum.auto()

# IntEnum: so sánh được với int
from enum import IntEnum
class Priority(IntEnum):
    LOW = 1
    HIGH = 3
print(Priority.HIGH > 2)  # True

# Flag: bitwise operations
from enum import Flag, auto
class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()
    
rw = Permission.READ | Permission.WRITE
print(Permission.READ in rw)  # True

Khi nào dùng Enum?

  • Trạng thái cố định: Status (PENDING, DONE, FAILED)
  • Cấu hình: Config keys, Error codes
  • Thay thế string literal dễ gõ sai
  • Cần type safety, IDE autocomplete