การใช้งาน Enumerations ใน Python

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

YouTube Video