Trong Python, thuật ngữ enumeration đề cập đến quá trình gán các giá trị hằng số cố định cho một tập hợp các chuỗi để mỗi chuỗi có thể được xác định bởi giá trị gán cho nó. Lớp Enum được bao gồm trong mô-đun enum (là một phần của thư viện chuẩn của Python) được sử dụng làm lớp cha để định nghĩa sự liệt kê của một tập hợp các định danh - thường được viết bằng chữ hoa.
Trong đoạn mã dưới đây, "subjects" là một kiểu liệt kê (enumeration). Nó có các thành viên liệt kê khác nhau và mỗi thành viên là một đối tượng của lớp liệt kê subjects. Các thành viên này có thuộc tính name và value.
# importing enum from enum import Enum class subjects(Enum): ENGLISH = 1 MATHS = 2 SCIENCE = 3 SANSKRIT = 4 obj = subjects.MATHS print (type(obj))
Nó dẫn đến output −
<enum 'subjects'>
Một lớp enum không thể có cùng một thành viên xuất hiện hai lần, tuy nhiên, có thể có nhiều thành viên được gán cùng một giá trị. Để đảm bảo rằng mỗi thành viên có một giá trị duy nhất gắn liền với nó, hãy sử dụng bộ trang trí @unique .
Trong ví dụ này, chúng ta đang sử dụng bộ trang trí @unique để hạn chế sự trùng lặp.
from enum import Enum, unique @unique class subjects(Enum): ENGLISH = 1 MATHS = 2 GEOGRAPHY = 3 SANSKRIT = 2
Điều này sẽ gây ra một ngoại lệ như được hiển thị dưới đây −
@unique ^^^^^^ raise ValueError('duplicate values found in %r: %s' % ValueError: duplicate values found in <enum 'subjects'>: SANSKRIT -> MATHS
Lớp Enum là một lớp có thể gọi được, do đó bạn có thể sử dụng bộ khởi tạo của nó để tạo một kiểu liệt kê. Bộ khởi tạo này chấp nhận hai tham số, đó là tên của kiểu liệt kê và một chuỗi bao gồm các tên biểu tượng của các thành viên trong kiểu liệt kê được phân tách bằng khoảng trắng.
Dưới đây là một phương pháp thay thế để định nghĩa một phép liệt kê −
from enum import Enum subjects = Enum("subjects", "ENGLISH MATHS SCIENCE SANSKRIT") print(subjects.ENGLISH) print(subjects.MATHS) print(subjects.SCIENCE) print(subjects.SANSKRIT)
Mã này sẽ cho output −
subjects.ENGLISH subjects.MATHS subjects.SCIENCE subjects.SANSKRIT
Các thành viên của một lớp enum có thể được truy cập theo hai chế độ −
Value − Trong chế độ này, giá trị của thành viên enum được truy cập bằng cách sử dụng từ khóa "value" theo sau là đối tượng của lớp enum.
Name − Tương tự, chúng ta sử dụng từ khóa "name" để truy cập tên của thành viên enum.
Ví dụ sau đây minh họa cách truy cập giá trị và tên của thành viên enum.
from enum import Enum class subjects(Enum): ENGLISH = "E" MATHS = "M" GEOGRAPHY = "G" SANSKRIT = "S" obj = subjects.SANSKRIT print(type(obj)) print(obj.name) print(obj.value)
Nó sẽ tạo ra output −
<enum 'subjects'> SANSKRIT S
Bạn có thể lặp qua các thành viên của enum theo thứ tự xuất hiện trong định nghĩa, với sự trợ giúp của một vòng lặp for .
Ví dụ sau đây cho thấy cách lặp qua một kiểu liệt kê (enumeration) bằng cách sử dụng vòng lặp for −
from enum import Enum class subjects(Enum): ENGLISH = "E" MATHS = "M" GEOGRAPHY = "G" SANSKRIT = "S" for sub in subjects: print (sub.name, sub.value)
Nó sẽ tạo ra output −
ENGLISH E MATHS M GEOGRAPHY G SANSKRIT S
Chúng ta biết rằng thành viên enum có thể được truy cập bằng giá trị duy nhất được gán cho nó, hoặc bằng thuộc tính tên của nó. Do đó, subjects("E") cũng như subjects["ENGLISH"] đều trả về thành viên subjects.ENGLISH.