Hướng dẫn dùng enumerable python python

Bài viết này sẽ khám phá tính năng Python enum, một công cụ mạnh mẽ để xử lý các tập dữ liệu không thay đổi.

Điều này không chỉ là yếu tố không thể thiếu để phát triển các phần mềm tổng quát mà còn là một công cụ hữu ích để xây dựgn các trò chơi – khiến nó trở thành một kỹ năng và nền tảng quan trọng trong python.

Hãy đi sâu vào và khám phá chủ đề hấp dẫn này!

Điều kiện tiên quyết: Người đọc phải có kiến thức làm việc về ngôn ngữ lập trình Python. Việc làm quen với cách viết các lớp cũng sẽ hữu ích vì các enum được triển khai dưới dạng các lớp Python. Bạn có thể tham khảo thêm khóa học python cơ bản trên unica: Học lập trình python cơ bản thông qua lập trình một game.

Enum viết tắt của từ enumeration có nghĩa là phép liệt kê, tính năng này xác định một tập hợp các tên được liên kết với các hằng số như số, chuỗi, v.v. Enum rất hữu ích để biểu diễn dữ liệu đại diện cho một tập hợp hữu hạn các trạng thái ví dụ như ngày trong tuần, tháng trong năm, …

Ví dụ đơn giản

Chúng ta định nghĩa một lớp đơn giản (kế thừa từ Enum) chứa các tháng trong năm. Mỗi tháng được gán một hằng số duy nhất.

from enum import Enum, unique, Flag
class Months(Enum) :
  JANUARY=1
  FEBRUARY=2
  MARCH = 3
  APRIL=4
  MAY=5
  JUNE=6
  JULY=7
  AUGUST=8
  SEPTEMBER=9
  OCTOBER=10
  NOVEMBER=11
  DECEMBER=12

In ra các thành viên của enum

Có một số cách chúng ta có thể làm điều này.

# sử dụng chỉ số
>> print (Months(7))
Months.JULY
# chỉ số bằng tên
>> print (Months['JULY'])
Months.JULY
# thông qua tên
>> print(Months.JULY)
Months.JULY
# thông qua tên
>> print (Months.JULY.name)
JULY
# thông qua giá trị
>> print (Months.JULY.value)
JULY

Đảm bảo duy nhất

Thêm chỉ dẫn @unique vào trước định nghĩa lớp, đảm bảo rằng các phần tử trùng lặp không tồn tại trong enum.

from enum import Enum, unique, Flag
>> @unique
... class Months(Enum) :
... 		JANUARY=1
... 		JANUARY=1
... 		FEBRUARY=2

Đoạn code trên sẽ phát sinh lỗi. Lỗi TypeError xảy ra khi trình biên dịch cố gắng tạo enum này.

Một cách khác để tạo một Enum

Chúng ta có thể tạo Enum đơn giản bằng cách gọi lớp Enum theo như ví dụ bên dưới

>> quarter1= Enum('Q1', [('January', 1), ('February', 2), ('March', 3)])
>> print (quarter1(3))
Q1.March
# có thể viết dưới dạng
>> quarter1= Enum('Q1', ('January February March'))
>> print (quarter1)

# truy cập item
>>> quarter1['January']

>>> Quarter1.March

>>> Quarter1.March.value
3

Lặp trên phần tử của Enum

Vòng lặp For

Một vòng lặp for đơn giản có thể được sử dụng để in ra các phần tử.

# vòng lặp for
for month in (Months) :
  print (month)

Months.JANUARY
Months.FEBRUARY
Months.MARCH
Months.APRIL
Months.MAY
Months.JUNE
Months.JULY
Months.AUGUST
Months.SEPTEMBER
Months.OCTOBER
Months.NOVEMBER
Months.DECEMBER

Thuộc tính __members__

__members__ là thuộc tính chỉ đọc của lớp cung cấp ánh xạ từ tên đến các phần tử. Nó có thể sử dụng để lặp.

# lặp trên các phần tử
for name, member in Months.__members__.items():
   print (name, member)

JANUARY Months.JANUARY
FEBRUARY Months.FEBRUARY
MARCH Months.MARCH
APRIL Months.APRIL
MAY Months.MAY
JUNE Months.JUNE
JULY Months.JULY
AUGUST Months.AUGUST
SEPTEMBER Months.SEPTEMBER
OCTOBER Months.OCTOBER
NOVEMBER Months.NOVEMBER
DECEMBER Months.DECEMBER

Giá trị tự động

Các giá trị tương ứng với tên có thể được điền tự động bằng hàm auto() như minh họa bên dưới.

# giá trị tự động cho các phần tử
from enum import auto
class Quarter(Enum):
   Q1 = auto()
   Q2 = auto()
   Q3 = auto()
   Q4 = auto()

for qtr in Quarter:
   print (qtr.value)

# Output
1
2
3
4

Các giá trị theo mặc định là số. Tuy nhiên, chúng có thể được chuyển đổi thành giá trị chuỗi bằng cách ghi đè phương thức _generate_next_value_ trong lớp.

from enum import auto
class Quarter(Enum):
	def _generate_next_value_(name, start, count, last_values):
		return "[" + name + "]"

	Q1 = auto()
	Q2 = auto()
	Q3 = auto()
	Q4 = auto()

for qtr in Quarter:
	print (qtr.value)

# Output
[Q1]
[Q2]
[Q3]
[Q4]

Các tài liệu Tham khảo hữu ích

Chúng ta đã đề cập đến những điều cơ bản, nhưng bây giờ đã đến lúc bạn tự khám phá cấu trúc Enum của Python! Hãy xem một số liên kết bên dưới để bắt đầu, với enums hoặc với các chủ đề lập trình Python khác.

– Python Official Documentation on Enums

– Khóa học Học lập trình python cơ bản thông qua lập trình một game trên unica.

– GeeksForGeeks – Python Enum

– FD Coding – Tại sao ta nên sử dụng Enum nhiều hơn trong Python 

Phần kết luận

Python Enum cực kỳ hữu ích trong việc quản lý dữ liệu với một tập các trạng thái hữu hạn. Tuy nhiên, bạn đi đến đâu với kiến thức mới này là tùy thuộc vào bạn. Có lẽ bạn quan tâm đến việc tạo một chương trình lịch phù hợp với bộ phần mềm dành cho doanh nghiệp. Hoặc, có thể bạn quan tâm đến việc tạo một trò chơi và sử dụng một enum Python cho các hiệu ứng trạng thái khác nhau. Việc sử dụng ở đây là khá vô hạn, nhưng chúng tôi hy vọng bạn có thể sử dụng một số thông tin mới theo ý của mình và có thể sử dụng Python enum cho lợi ích và thành công của bạn!

Xem thêm:

  • Python Tuple