การใช้งาน Enumerations ใน Python
บทความนี้อธิบายเกี่ยวกับการใช้งาน Enumerations ใน Python
YouTube Video
การใช้งาน Enumerations ใน Python
enum
ใน Python เป็นคลาสพิเศษสำหรับกำหนดค่าคงที่ เพิ่มความสามารถในการอ่านโค้ดและช่วยลดข้อผิดพลาดในการเขียนโค้ด
Enum
คืออะไร?
Enum
(ย่อมาจาก enumeration) เป็นคลาสที่ใช้ในการกำหนดชุดของค่าคงที่ที่มีชื่อกำกับ โดยทั่วไปจะใช้เพื่อจัดค่าคงที่ที่เกี่ยวข้องไว้ด้วยกัน เช่น เหมาะสำหรับแทนค่าของสี วันในสัปดาห์ หรือทิศทาง
ทำไมต้องใช้ Enum
?
มีเหตุผลหลายประการที่ควรใช้ Enum
- เพิ่มความเข้าใจในโค้ด: การใช้ค่าคงที่ที่มีชื่อทำให้โค้ดเข้าใจง่ายขึ้น
- ลดข้อผิดพลาดในโค้ด: ช่วยป้องกันการเปลี่ยนแปลงหรือการใช้ค่าคงที่ผิดวิธี
- การจัดกลุ่ม: ช่วยจัดค่าคงที่ที่เกี่ยวข้องให้อยู่ในคลาสเดียว ทำให้ข้อมูลมีโครงสร้าง
การใช้งาน Enum
ขั้นพื้นฐาน
ในการใช้งาน enum
ให้ import โมดูล enum
และกำหนดคลาสขึ้นมา คลาสนั้นจะต้องสืบทอดจาก Enum
และระบุค่าที่ต้องการให้แสดงเป็นค่าคงที่
ตัวอย่าง Enum
พื้นฐาน
1from enum import Enum
2
3class Color(Enum):
4 RED = 1
5 GREEN = 2
6 BLUE = 3
7
8# Usage of Enum
9print(Color.RED) # Color.RED
10print(Color.RED.name) # RED
11print(Color.RED.value) # 1
ในตัวอย่างนี้ เราจะกำหนดคลาส Enum
ชื่อ Color
พร้อมค่าทั้งสาม แต่ละชื่อสามารถเข้าถึงได้ผ่านแอตทริบิวต์ name
และค่าสัมพันธ์สามารถเข้าถึงได้ผ่านแอตทริบิวต์ value
การเปรียบเทียบ Enum
สมาชิกของ Enum
สามารถเปรียบเทียบได้ทั้งตามชื่อหรือค่าของมัน คุณสามารถใช้ตัวดำเนินการ is
หรือ ==
เพื่อตรวจสอบความเหมือนหรือความเท่าเทียม
ตัวอย่างการเปรียบเทียบ
1from enum import Enum
2
3class Direction(Enum):
4 NORTH = 1
5 SOUTH = 2
6 EAST = 3
7 WEST = 4
8
9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH) # False
11print(Direction.NORTH == Direction.NORTH) # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH) # False
15print(Direction.NORTH is Direction.NORTH) # True
ที่นี่จะแสดงตัวอย่างการเปรียบเทียบ Enum
ด้วย ==
และ is
Enum
ถูกออกแบบมาเพื่อเปรียบเทียบวัตถุที่มีชื่อและค่าที่เหมือนกันได้อย่างถูกต้อง
การกำหนดค่าอัตโนมัติด้วย auto()
หากคุณต้องการกำหนดค่าให้กับสมาชิก Enum
โดยอัตโนมัติ คุณสามารถใช้ enum.auto()
auto()
ช่วยให้ Python กำหนดค่าให้โดยอัตโนมัติ ลดความจำเป็นในการระบุค่าด้วยตนเองโดยนักพัฒนา
ตัวอย่างการใช้ auto()
1from enum import Enum, auto
2
3class Animal(Enum):
4 DOG = auto()
5 CAT = auto()
6 MOUSE = auto()
7
8# Check the values of Enum
9print(Animal.DOG.value) # 1
10print(Animal.CAT.value) # 2
11print(Animal.MOUSE.value) # 3
ในตัวอย่างนี้ การใช้ auto()
ช่วยลดความจำเป็นในการระบุค่าอย่างชัดเจน ทำให้โค้ดกระชับยิ่งขึ้น
การกำหนดค่าหลายตัวให้กับสมาชิก Enum
สมาชิก Enum
สามารถมีค่าหลายตัวได้ เช่น tuple สิ่งนี้ช่วยให้สมาชิกแต่ละตัวสามารถถือข้อมูลเพิ่มเติมที่เกี่ยวข้องได้
ตัวอย่างการใช้ tuple
1from enum import Enum
2
3class Status(Enum):
4 ACTIVE = (1, 'Active user')
5 INACTIVE = (2, 'Inactive user')
6 SUSPENDED = (3, 'Suspended user')
7
8# Accessing Enum members
9print(Status.ACTIVE.name) # ACTIVE
10print(Status.ACTIVE.value) # (1, 'Active user')
11print(Status.ACTIVE.value[1]) # Active user
ในตัวอย่างนี้ สมาชิกของคลาส Status
มีค่า 2 ค่า ซึ่งแทนสถานะและคำอธิบาย สิ่งนี้มีประโยชน์เมื่อคุณต้องการเชื่อมโยงข้อมูลหลายชิ้นกับสมาชิก Enum
การใช้ Enum
เป็นตัวกำกับสถานะ (flag)
enum
ของ Python มีคลาส Flag
ที่สามารถใช้เหมือนตัวกำกับสถานะแบบบิต (bit flags) การใช้ Flag
ช่วยให้คุณจัดการสถานะหลายตัวในรูปแบบการรวมกัน
ตัวอย่างการใช้ Flag
1from enum import Flag, auto
2
3class Permission(Flag):
4 READ = auto()
5 WRITE = auto()
6 EXECUTE = auto()
7
8# Combining flags
9permission = Permission.READ | Permission.WRITE
10print(permission) # Permission.READ|WRITE
11print(Permission.EXECUTE in permission) # False
ในตัวอย่างนี้ ใช้การดำเนินการแบบบิตไวส์ (bitwise operations) เพื่อรวมสิทธิ์หลายตัว การใช้ Flag
ช่วยให้คุณจัดการสถานะหลายตัวได้อย่างกระชับ
ข้อควรระวังเมื่อใช้ Enum
การไม่เปลี่ยนแปลงของ Enum
สมาชิก Enum
ไม่สามารถเปลี่ยนแปลงได้ เมื่อกำหนดแล้ว ชื่อหรือค่าของพวกเขาจะไม่สามารถเปลี่ยนแปลงได้ นี่เป็นลักษณะสำคัญเพื่อรักษาความสม่ำเสมอในฐานะค่าคงที่
1from enum import Enum
2
3class Days(Enum):
4 MONDAY = 1
5 TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3 # AttributeError: Cannot reassign members.
การห้ามไม่ให้มีสมาชิกซ้ำ
สมาชิก Enum
ต้องมีชื่อและค่าที่ไม่ซ้ำกัน แม้ว่าค่าซ้ำกันจะได้รับอนุญาต แต่ Python จะจัดลำดับความสำคัญให้กับสมาชิกตัวแรกโดยอัตโนมัติ
สรุป
โมดูล enum
ของ Python เป็นเครื่องมือที่มีประโยชน์มากในการจัดกลุ่มชุดของค่าคงที่ ปรับปรุงความอ่านง่าย และรักษาความสอดคล้องของโค้ด การใช้งานที่หลากหลายเป็นไปได้ ตั้งแต่การใช้งานพื้นฐานไปจนถึงการกำหนดค่ าอัตโนมัติด้วย auto()
รวมถึงการใช้งานเป็นบิตแฟล็ก
การทำความเข้าใจและเชี่ยวชาญเรื่อง enum
อย่างถูกต้องสามารถปรับปรุงคุณภาพของโค้ดและช่วยป้องกันข้อผิดพลาด
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย