Khóa học python

Enums trong Python

0 phút đọc

Enums, viết tắt của "enumerations", là một tập hợp các tên biểu tượng được gán cho các giá trị duy nhất. Enums giúp mã nguồn trở nên dễ đọc và bảo trì hơn bằng cách thay thế các giá trị số hoặc chuỗi không rõ ràng bằng các tên có ý nghĩa. Trong Python, module enum cung cấp các công cụ để tạo và làm việc với enums.

Tại Sao Sử Dụng Enums?

Sử dụng enums mang lại nhiều lợi ích, bao gồm:

  • Tăng Tính Đọc và Bảo Trì: Enums thay thế các giá trị số hoặc chuỗi không rõ ràng bằng các tên có ý nghĩa, giúp mã nguồn dễ đọc và bảo trì hơn.
  • Tăng Tính An Toàn Kiểu Dữ Liệu: Enums đảm bảo rằng chỉ các giá trị hợp lệ mới được sử dụng, giảm nguy cơ lỗi do sử dụng các giá trị không hợp lệ.
  • Dễ Dàng So Sánh và Lặp Qua Các Giá Trị: Enums cho phép dễ dàng so sánh và lặp qua các giá trị liên quan.

Tạo Enums trong Python

Để tạo enums trong Python, bạn cần sử dụng module enum và lớp Enum. Bạn có thể tạo enums bằng cách kế thừa từ lớp Enum hoặc sử dụng API hàm của nó.

Ví Dụ Cơ Bản

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# Truy cập các thành viên của enum
print(Color.RED)
print(Color.GREEN)
print(Color.BLUE)

# Truy cập tên và giá trị của thành viên
print(Color.RED.name)  # Output: RED
print(Color.RED.value)  # Output: 1

Trong ví dụ trên, chúng ta đã tạo một enum Color với ba thành viên: RED, GREEN, và BLUE. Mỗi thành viên được gán một giá trị duy nhất.

Các Thuộc Tính và Phương Thức của Enums

Kiểm Tra Kiểu của Thành Viên Enum

Bạn có thể sử dụng hàm isinstance() để kiểm tra xem một đối tượng có phải là thành viên của một enum hay không.

if isinstance(Color.RED, Color):
    print("Color.RED là một thành viên của enum Color.")

Truy Cập Tên và Giá Trị của Thành Viên Enum

Mỗi thành viên của enum có hai thuộc tính chính: namevalue.

print(Color.RED.name)  # Output: RED
print(Color.RED.value)  # Output: 1

Lặp Qua Các Thành Viên của Enum

Bạn có thể lặp qua các thành viên của enum bằng cách sử dụng vòng lặp for.

for color in Color:
    print(color)

Kết Quả:

Color.RED
Color.GREEN
Color.BLUE

Các Loại Enum Đặc Biệt

Python cung cấp một số loại enum đặc biệt như IntEnum, IntFlag, và Flag để tạo ra các enum chuyên biệt.

IntEnum

IntEnum là một lớp con của Enum trong đó các giá trị của thành viên phải là các số nguyên.

from enum import IntEnum

class Status(IntEnum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2

print(Status.TODO)  # Output: Status.TODO
print(Status.TODO.value)  # Output: 0

IntFlag và Flag

IntFlagFlag cho phép bạn tạo ra các enum có thể kết hợp bằng các toán tử bitwise.

from enum import IntFlag

class Permission(IntFlag):
    READ = 1
    WRITE = 2
    EXECUTE = 4

# Kết hợp các quyền
permission = Permission.READ | Permission.WRITE
print(permission)  # Output: Permission.READ|WRITE

Sử Dụng Enums trong Thực Tế

Enums rất hữu ích trong nhiều tình huống thực tế, chẳng hạn như quản lý trạng thái của một tác vụ hoặc định nghĩa các ngày trong tuần.

Ví Dụ: Quản Lý Trạng Thái Tác Vụ

from enum import Enum

class TaskStatus(Enum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2
    ABANDONED = -1

# Sử dụng enum trong mã nguồn
def update_task_status(task, status):
    if not isinstance(status, TaskStatus):
        raise ValueError("Invalid status")
    task['status'] = status

task = {'name': 'Write code', 'status': TaskStatus.TODO}
update_task_status(task, TaskStatus.IN_PROGRESS)
print(task)

Kết Quả:

{'name': 'Write code', 'status': <TaskStatus.IN_PROGRESS: 1>}

Ví Dụ: Định Nghĩa Các Ngày Trong Tuần

from enum import Enum

class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7

# Sử dụng enum trong mã nguồn
def is_weekend(day):
    return day in (Weekday.SATURDAY, Weekday.SUNDAY)

print(is_weekend(Weekday.SATURDAY))  # Output: True
print(is_weekend(Weekday.MONDAY))    # Output: False

Tùy Chỉnh Enums

Bạn có thể tùy chỉnh các lớp enum bằng cách thêm các phương thức và thuộc tính.

Ví Dụ: Tùy Chỉnh Enum

from enum import Enum

class Mood(Enum):
    HAPPY = 1
    SAD = 2
    ANGRY = 3

    def describe(self):
        return f"{self.name} has value {self.value}"

    def __str__(self):
        return f"Mood: {self.name}"

# Sử dụng enum tùy chỉnh
print(Mood.HAPPY.describe())  # Output: HAPPY has value 1
print(str(Mood.SAD))          # Output: Mood: SAD

Sử Dụng Decorator @unique

Decorator @unique đảm bảo rằng mỗi giá trị trong enum là duy nhất.

from enum import Enum, unique

@unique
class UniqueEnum(Enum):
    ONE = 1
    TWO = 2
    THREE = 3

# Sử dụng enum với @unique
try:
    @unique
    class InvalidEnum(Enum):
        ONE = 1
        TWO = 1
except ValueError as e:
    print(e)  # Output: duplicate values found in <enum 'InvalidEnum'>: TWO -> ONE

Kết Luận

Enums là một công cụ mạnh mẽ trong Python, giúp mã nguồn trở nên dễ đọc, bảo trì và an toàn hơn. Bằng cách sử dụng module enum, bạn có thể tạo ra các tập hợp các giá trị liên quan và làm việc với chúng một cách hiệu quả. Enums cung cấp nhiều lợi ích, bao gồm tăng tính đọc, bảo trì, an toàn kiểu dữ liệu và dễ dàng so sánh và lặp qua các giá trị.

Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về enums trong Python và cách sử dụng chúng để đạt được mục tiêu của bạn.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

Liệt kê các kiểu dữ liệu trong Python?

entry

Biến cục bộbiến toàn cục trong Python là gì?

entry

Trong Python có những built-in types nào?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào