Python - Enums

Enums in Python

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.

Example

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 .

Example

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.

Example

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

Accessing Modes in Enums

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.

Example

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

Iterating through Enums

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 .

Example

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.