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

Enum ใน Python

Enum เป็นคลาสใน Python สำหรับสร้าง enumerations (การแจกแจงค่า) ซึ่งเป็นชุดของชื่อเชิงสัญลักษณ์ (members) ที่ผูกกับค่าคงที่ที่ไม่ซ้ำกัน (unique, constant values) สมาชิกของ enumeration สามารถเปรียบเทียบได้ด้วยชื่อเชิงสัญลักษณ์เหล่านี้ และ enumeration เองสามารถวนรอบ (iterate) ได้ Enum มีลักษณะเฉพาะดังนี้:

  • Enums เป็นการแสดงสตริงที่ประเมินค่าได้ของอ็อบเจกต์ เรียกว่า repr()
  • ชื่อของ enum แสดงโดยใช้คีย์เวิร์ด 'name'
  • ใช้ type() เพื่อตรวจสอบประเภทของ enum

ตัวอย่าง

import enum

# ใช้ enum class สร้าง enumerations
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# พิมพ์ enum member เป็นสตริง
print("The enum member as a string is:", end="")
print(Days.Mon)

# พิมพ์ enum member เป็น repr
print("The enum member as a repr is:", end="")
print(repr(Days.Sun))

# ตรวจสอบประเภทของ enum member
print("The type of enum member is:", end="")
print(type(Days.Mon))

# พิมพ์ชื่อของ enum member
print("The name of enum member is:", end="")
print(Days.Tue.name)

ผลลัพธ์

The enum member as a string is: Days.Mon
The enum member as a repr is: 
The type of enum member is: 
The name of enum member is: Tue

พิมพ์ Enum เป็น iterable

เราสามารถพิมพ์ enum เป็นรายการที่วนรอบได้ (iterable list) ในโค้ดด้านล่าง เราใช้ for loop เพื่อพิมพ์สมาชิก enum ทั้งหมด

ตัวอย่าง

import enum

# ใช้ enum class สร้าง enumerations
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# พิมพ์สมาชิก enum ทั้งหมดด้วยลูป
print("The enum members are:")
for weekday in (Days):
    print(weekday)

ผลลัพธ์

The enum members are:
Days.Sun
Days.Mon
Days.Tue

Hashing Enums

สมาชิกใน Enumeration สามารถแฮชได้ (hashable) ดังนั้นจึงสามารถใช้ใน dictionaries และ sets ได้ ในตัวอย่างด้านล่าง เราเห็น hashing ในการทำงานและตรวจสอบว่าการแฮชสำเร็จหรือไม่

ตัวอย่าง

import enum

# ใช้ enum class สร้าง enumerations
class Days(enum.Enum):
    Sun = 1
    Mon = 2

# Hashing เพื่อสร้าง dictionary
Daytype = {}
Daytype[Days.Sun] = 'Sun God'
Daytype[Days.Mon] = 'Moon God'

# ตรวจสอบว่าการแฮชสำเร็จ
print(Daytype == {Days.Sun: 'Sun God', Days.Mon: 'Moon God'})

ผลลัพธ์

True

เข้าถึง Enums

เราสามารถเข้าถึงสมาชิก enum ได้โดยใช้ชื่อหรือค่าของรายการสมาชิก ในตัวอย่างด้านล่าง เราเข้าถึงค่าก่อนโดยใช้ชื่อ โดยเราใช้ชื่อของ enum เป็นดัชนี

ตัวอย่าง

import enum

# ใช้ enum class สร้าง enumerations
class Days(enum.Enum):
    Sun = 1
    Mon = 2

print('enum member accessed by name:')
print(Days['Mon'])
print('enum member accessed by value:')
print(Days(1))

ผลลัพธ์

enum member accessed by name: Days.Mon
enum member accessed by value: Days.Sun

เปรียบเทียบ Enums

การเปรียบเทียบ enums เป็นกระบวนการตรงไปตรงมา เราใช้ตัวดำเนินการเปรียบเทียบ

ตัวอย่าง

import enum

# ใช้ enum class สร้าง enumerations
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 1

if Days.Sun == Days.Tue:
    print('Match')
if Days.Mon != Days.Tue:
    print('No Match')

ผลลัพธ์

Match
No Match