การใช้งาน 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 ด้วย