99 vào enum của mình, nếu tất cả những gì bạn muốn là cung cấp một biểu diễn chuỗi tùy chỉnh. Nó cũng sẽ cho phép bạn in nó theo cách đó trong danh sách
from enum import Enum
class D(Enum):
def __str__(self):
return str(self.value)
x = 1
y = 2
print(D.x)
Output. 1
Do comment if you have any doubts and suggestions on this Python enum topic
Note. IDE. PyCharm 2021. 3. 3 (Community Edition)
Windows 10
Python 3. 10. 1
All Python Examples are in Python 3, so Maybe its different from python 2 or upgraded versions
Rohit
Degree in Computer Science and Engineer. App Developer and has multiple Programming languages experience. Enthusiasm for technology & like learning technical
Chúc các bạn một ngày tốt lành. In this post, we'll look at how to solve the Python Enum Key String Get programming puzzle
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
We have shown how to address the Python Enum Key String Get problemby looking at a number of different cases
How do I get the enum key in Python?
Use the name attribute on the enum member to get the name, e. g. Sizes. SMALL. name . If you only have the corresponding value, pass the value to the enumeration class and access the name attribute. Copied. You can use the name and value properties on an enum member to get the enum's name and value. 17-Jun-2022
How do I find my enum key?
To get an enum key by value
Use the Object. values() method to get an array of the enum's values
Use the indexOf() method to get the index of the value in the array
Use the Object. keys() method to get an array of the enum's keys
Access the array of keys at the specific index
How do you return enum value in Python?
To get a value in an enum in Python
Use dot notation to access the specific enum member, e. g. Color. GREEN
Access the value attribute on the enum member, e. g. Color. GREEN. value
How do I print an enum in Python?
We can access the enum members by using the dot operator(. ) with the enum class name. repr() . The repr() method used to print enum member. type(). This is used to print the type of enum member
What is enum value in Python?
An Enum is a set of symbolic names bound to unique values. They are similar to global variables, but they offer a more useful repr() , grouping, type-safety, and a few other features. As you can see, creating an Enum is as simple as writing a class that inherits from Enum itself
What is key enumeration?
The next set of Keys values refers to the horizontal row of number keys located above the letter keys regardless of shift state. Keys Enumeration (number keys) Member. Value. 14-May-2022
What is enum TS?
In TypeScript, enums, or enumerated types, are data structures of constant length that hold a set of constant values. Each of these constant values is known as a member of the enum. Enums are useful when setting properties or values that can only be a certain number of possible values. 14-Jun-2021
How do you use enums?
You should always use enums when a variable (especially a method parameter) can only take one out of a small set of possible values. Examples would be things like type constants (contract status. “permanent”, “temp”, “apprentice”), or flags (“execute now”, “defer execution”). 30-Tháng 9-2020
Can enum values be strings Python?
Enumerations are created using classes. Enums have names and values associated with them. Properties of enum. Enums can be displayed as string or repr. 16-Aug-2022
Can Python enum have methods?
Python enumerations are classes. It means that you can add methods to them, or implement the dunder methods to customize their behaviors
Some programming languages, like Java and C++, include syntax that supports a data type known as enumerations, or just enums. This data type allows you to create sets of semantically related constants that you can access through the enumeration itself. Python doesn’t have a dedicated syntax for enums. However, the Python standard library has an
If you come from a language with enumerations, and you’re used to working with them, or if you just want to learn how to use enumerations in Python, then this tutorial is for you
Để làm theo hướng dẫn này, bạn nên làm quen với lập trình hướng đối tượng và kế thừa trong Python
Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để xây dựng bảng liệt kê trong Python
Làm quen với phép liệt kê trong Python
Một số ngôn ngữ lập trình, bao gồm Java và C++, có kiểu dữ liệu liệt kê hoặc kiểu dữ liệu enum riêng như một phần cú pháp của chúng. Kiểu dữ liệu này cho phép bạn tạo các tập hợp các hằng số được đặt tên, được coi là thành viên của enum chứa. Bạn có thể truy cập các thành viên thông qua bảng liệt kê
Phép liệt kê có ích khi bạn cần xác định một tập hợp bất biến và rời rạc của các giá trị hằng số tương tự hoặc có liên quan có thể có hoặc không có ý nghĩa ngữ nghĩa trong mã của bạn
Ngày trong tuần, tháng và mùa trong năm, hướng chính của Trái đất, mã trạng thái của chương trình, mã trạng thái HTTP, màu sắc của đèn giao thông và kế hoạch định giá của dịch vụ web đều là những ví dụ tuyệt vời về phép liệt kê trong lập trình. Nói chung, bạn có thể sử dụng enum bất cứ khi nào bạn có một biến có thể nhận một trong số các giá trị có thể có giới hạn
Python không có kiểu dữ liệu enum như một phần cú pháp của nó. May mắn thay, Python 3. 4 đã thêm mô-đun
2 để hỗ trợ các kiểu liệt kê có mục đích chung trong Python
Phép liệt kê được giới thiệu bởi PEP 435, định nghĩa chúng như sau
Một phép liệt kê là một tập hợp các tên tượng trưng được liên kết với các giá trị không đổi, duy nhất. Trong một phép liệt kê, các giá trị có thể được so sánh theo danh tính và bản thân phép liệt kê có thể được lặp lại. (Nguồn)
Trước phần bổ sung này vào thư viện chuẩn, bạn có thể tạo thứ gì đó tương tự như phép liệt kê bằng cách xác định một chuỗi các hằng số tương tự hoặc có liên quan. Để làm được điều này, các nhà phát triển Python thường sử dụng thành ngữ sau
>>>
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
1
Mặc dù thành ngữ này hoạt động, nhưng nó không mở rộng tốt khi bạn đang cố gắng nhóm một số lượng lớn các hằng số liên quan. Một điều bất tiện khác là hằng số đầu tiên sẽ có giá trị là
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
20, giá trị này là sai trong Python. Đây có thể là một vấn đề trong một số trường hợp nhất định, đặc biệt là những trường hợp liên quan đến kiểm tra Boolean
Ghi chú. Nếu bạn đang sử dụng phiên bản Python trước 3. 4, thì bạn có thể tạo bảng liệt kê bằng cách cài đặt thư viện enum34, đây là cổng sau của thư viện chuẩn
1. Thư viện của bên thứ ba aenum cũng có thể là một lựa chọn cho bạn
Trong hầu hết các trường hợp, phép liệt kê có thể giúp bạn tránh được nhược điểm của thành ngữ trên. Chúng cũng sẽ giúp bạn tạo mã có tổ chức hơn, dễ đọc và mạnh mẽ hơn. Việc liệt kê có một số lợi ích, một số lợi ích liên quan đến việc mã hóa dễ dàng
Cho phép nhóm các hằng số liên quan một cách thuận tiện trong một loại không gian tên
Cho phép hành vi bổ sung với các phương thức tùy chỉnh hoạt động trên thành viên enum hoặc chính enum
Cung cấp quyền truy cập nhanh chóng và linh hoạt cho các thành viên enum
Cho phép lặp lại trực tiếp trên các thành viên, bao gồm tên và giá trị của họ
Tạo điều kiện hoàn thành mã trong IDE và trình chỉnh sửa
Cho phép kiểm tra loại và lỗi bằng trình kiểm tra tĩnh
Cung cấp một trung tâm tên có thể tìm kiếm
Giảm thiểu lỗi chính tả khi sử dụng các phần tử của một kiểu liệt kê
Họ cũng làm cho mã của bạn mạnh mẽ bằng cách cung cấp các lợi ích sau
Đảm bảo các giá trị không đổi không thể thay đổi trong quá trình thực thi mã
Đảm bảo an toàn cho loại bằng cách phân biệt cùng một giá trị được chia sẻ trên một số enum
Cải thiện khả năng đọc và khả năng bảo trì bằng cách sử dụng tên mô tả thay vì giá trị bí ẩn hoặc số ma thuật
Tạo điều kiện gỡ lỗi bằng cách tận dụng các tên có thể đọc được thay vì các giá trị không có ý nghĩa rõ ràng
Cung cấp một nguồn duy nhất của sự thật và tính nhất quán trong toàn bộ mã
Bây giờ bạn đã biết kiến thức cơ bản về kiểu liệt kê trong lập trình và trong Python, bạn có thể bắt đầu tạo kiểu kiểu liệt kê của riêng mình bằng cách sử dụng lớp
2. Bạn cũng sẽ tìm hiểu cách đặt giá trị được tạo tự động cho enum của mình và cách tạo liệt kê chứa bí danh và giá trị duy nhất. Để bắt đầu, bạn sẽ bắt đầu bằng cách học cách tạo một phép liệt kê bằng cách phân lớp
Tạo bảng liệt kê bằng cách phân lớp >>> from enum import Enum
>>> class Grade(Enum):
.. A = 90
.. B = 80
.. C = 70
.. D = 60
.. F = 0
...
>>> list(Grade)
[
<Grade.A: 90>,
<Grade.B: 80>,
<Grade.C: 70>,
<Grade.D: 60>,
<Grade.F: 0>
]
2
1 xác định kiểu liệt kê có mục đích chung với khả năng lặp lại và so sánh. Bạn có thể sử dụng loại này để tạo các tập hợp các hằng số được đặt tên mà bạn có thể sử dụng để thay thế các chữ cái của các loại dữ liệu phổ biến, chẳng hạn như số và chuỗi
Một ví dụ kinh điển về thời điểm bạn nên sử dụng kiểu liệt kê là khi bạn cần tạo một tập hợp các hằng số liệt kê biểu thị các ngày trong tuần. Mỗi ngày sẽ có một tên tượng trưng và một giá trị số giữa
38, và những thứ tương tự là thành viên điều tra, còn được gọi là thành viên enum, hoặc chỉ thành viên. Mỗi thành viên phải có một giá trị, cần phải không đổi
Bởi vì các thành viên liệt kê phải là hằng số, Python không cho phép bạn gán giá trị mới cho các thành viên enum trong thời gian chạy
39. Không giống như tên thành viên, bản thân tên chứa kiểu liệt kê không phải là hằng mà là một biến. Vì vậy, có thể rebind tên này bất cứ lúc nào trong quá trình thực thi chương trình của bạn, nhưng bạn nên tránh làm điều đó
34, hiện giữ một chuỗi thay vì kiểu liệt kê ban đầu. Bằng cách này, bạn đã mất tham chiếu đến chính enum
Thông thường, các giá trị được ánh xạ tới các thành viên là các số nguyên liên tiếp. Tuy nhiên, chúng có thể thuộc bất kỳ loại nào, kể cả các loại do người dùng định nghĩa. Trong ví dụ này, giá trị của
Bởi vì Enums được sử dụng để đại diện cho các hằng số, chúng tôi khuyên bạn nên sử dụng tên UPPER_CASE cho các thành viên enum… (Nguồn)
Bạn có thể coi kiểu liệt kê là tập hợp các hằng số. Giống như danh sách, bộ dữ liệu hoặc từ điển, liệt kê Python cũng có thể lặp lại. Đó là lý do tại sao bạn có thể sử dụng
89 để tạo kiểu liệt kê, nhưng chúng là các lớp đặc biệt khác với các lớp Python thông thường. Không giống như các lớp thông thường, enums
Không thể khởi tạo
Không thể được phân lớp trừ khi enum cơ sở không có thành viên
Cung cấp một đại diện chuỗi có thể đọc được cho con người cho các thành viên của họ
Có thể lặp lại không, trả về các thành viên của chúng theo trình tự
Cung cấp các thành viên có thể băm có thể được sử dụng làm khóa từ điển
Hỗ trợ cú pháp dấu ngoặc vuông, cú pháp gọi và ký hiệu dấu chấm để truy cập các thành viên
Không cho phép chỉ định lại thành viên
Bạn nên ghi nhớ tất cả những khác biệt tinh tế này khi bắt đầu tạo và làm việc với các kiểu liệt kê của riêng mình trong Python
Thông thường, các phần tử của một phép liệt kê nhận các giá trị nguyên liên tiếp. Tuy nhiên, trong Python, giá trị của các thành viên có thể thuộc bất kỳ kiểu nào, kể cả kiểu do người dùng định nghĩa. Ví dụ: đây là bảng liệt kê các điểm của trường sử dụng các giá trị số không liên tiếp theo thứ tự giảm dần
Ví dụ này cho thấy Python enums khá linh hoạt và cho phép bạn sử dụng bất kỳ giá trị có ý nghĩa nào cho các thành viên của chúng. Bạn có thể đặt các giá trị thành viên theo mục đích của mã của mình
Bạn cũng có thể sử dụng các giá trị chuỗi cho các thành viên liệt kê của mình. Dưới đây là ví dụ về bảng liệt kê
600 mà bạn có thể sử dụng trong cửa hàng trực tuyến
>>>
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
2
Trong ví dụ này, giá trị được liên kết với mỗi kích thước chứa một mô tả có thể giúp bạn và các nhà phát triển khác hiểu ý nghĩa mã của bạn
Bạn cũng có thể tạo bảng liệt kê các giá trị Boolean. Trong trường hợp này, các thành viên của bảng liệt kê của bạn sẽ chỉ có hai giá trị
Hai ví dụ này cho thấy cách bạn có thể sử dụng kiểu liệt kê để thêm ngữ cảnh bổ sung vào mã của mình. Trong ví dụ đầu tiên, bất kỳ ai đọc mã của bạn sẽ biết rằng mã này mô phỏng một đối tượng chuyển đổi với hai trạng thái có thể xảy ra. Thông tin bổ sung này cải thiện đáng kể khả năng đọc mã của bạn
Bạn cũng có thể xác định một phép liệt kê với các giá trị không đồng nhất
Tuy nhiên, thực tế này làm cho mã của bạn không nhất quán từ góc độ an toàn loại. Do đó, nó không được khuyến khích thực hành. Lý tưởng nhất là sẽ hữu ích nếu bạn có các giá trị thuộc cùng một kiểu dữ liệu, điều này phù hợp với ý tưởng nhóm các hằng số tương tự, có liên quan với nhau trong kiểu liệt kê
Cuối cùng, bạn cũng có thể tạo các kiểu liệt kê trống
604) hoặc chuỗi tài liệu cấp lớp để tạo các bảng liệt kê trống. Cách tiếp cận cuối cùng này có thể giúp bạn cải thiện khả năng đọc mã của mình bằng cách cung cấp thêm ngữ cảnh trong chuỗi tài liệu
Bây giờ, tại sao bạn vẫn cần xác định một kiểu liệt kê trống?
618 là bắt buộc khi bạn muốn cung cấp lớp mixin cho phép liệt kê của mình. Sử dụng lớp mixin có thể cung cấp cho enum tùy chỉnh của bạn chức năng mới, chẳng hạn như khả năng so sánh mở rộng, như bạn sẽ tìm hiểu trong phần về cách trộn kiểu liệt kê với các kiểu dữ liệu khác
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
20. Lý do cho giá trị mặc định này là vì
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
20 sai theo nghĩa Boolean, nhưng các thành viên enum đánh giá là
from enum import Enum
class Status(Enum):
STATUS_OK = 0
STATUS_ERR_NULL_POINTER = 1
STATUS_ERR_INVALID_PARAMETER = 2
#giving you access to the name and value:
name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value # gives 1
or
#You'd have to loop through the class attributes to find the matching name:
name = next(name for name, value in vars(Status).items() if value == 1)
20 sẽ có vẻ ngạc nhiên và khó hiểu
Hầu hết thời gian, bạn sẽ chỉ sử dụng hai đối số đầu tiên cho
641. Để cung cấp tên thành viên, bạn sử dụng danh sách các chuỗi. Mỗi chuỗi đại diện cho một phương thức HTTP. Lưu ý rằng các giá trị thành viên được tự động đặt thành các số nguyên liên tiếp bắt đầu từ
Sử dụng cú pháp lớp hoặc API chức năng để tạo bảng liệt kê là quyết định của bạn và chủ yếu sẽ phụ thuộc vào sở thích và điều kiện cụ thể của bạn. Tuy nhiên, nếu bạn muốn tạo bảng liệt kê động, thì API chức năng có thể là lựa chọn duy nhất của bạn
Xem xét ví dụ sau, nơi bạn tạo một enum với các thành viên do người dùng cung cấp
Ví dụ này hơi cực đoan vì tạo bất kỳ đối tượng nào từ đầu vào của người dùng của bạn là một thực tế khá rủi ro, vì bạn không thể dự đoán những gì người dùng sẽ nhập. Tuy nhiên, ví dụ này nhằm cho thấy rằng API chức năng là cách phù hợp khi bạn cần tạo các bảng liệt kê động
Cuối cùng, nếu bạn cần đặt các giá trị tùy chỉnh cho các thành viên enum của mình, thì bạn có thể sử dụng một cặp giá trị tên có thể lặp lại làm đối số
647 với các giá trị tùy chỉnh cho các thành viên. Trong ví dụ này, nếu bạn không muốn sử dụng danh sách các bộ giá trị tên, thì bạn cũng có thể sử dụng từ điển ánh xạ tên thành giá trịLoại bỏ các quảng cáo
649 cho phép bạn đặt các giá trị tự động cho các thành viên enum của mình. Hành vi mặc định của hàm này là gán các giá trị số nguyên liên tiếp cho các thành viên
Trong ví dụ này, bạn tạo một bảng liệt kê các hướng chính của Trái đất, trong đó các giá trị được tự động đặt thành chuỗi chứa ký tự đầu tiên trong tên của mỗi thành viên. Lưu ý rằng bạn phải cung cấp phiên bản
657 bị ghi đè trước khi xác định bất kỳ thành viên nào. Đó là bởi vì các thành viên sẽ được xây dựng bằng cách gọi phương thức
Tạo bảng liệt kê với bí danh và giá trị duy nhất
Bạn có thể tạo các kiểu liệt kê trong đó hai hoặc nhiều phần tử có cùng giá trị không đổi. Các thành viên dư thừa được gọi là bí danh và có thể hữu ích trong một số trường hợp. Ví dụ: giả sử bạn có một enum chứa một bộ hệ điều hành (HĐH), như trong đoạn mã sau
Các bản phân phối Linux được coi là hệ điều hành độc lập. Vì vậy, Ubuntu và Debian đều là các hệ thống độc lập với các mục tiêu và đối tượng mục tiêu khác nhau. Tuy nhiên, họ chia sẻ một hạt nhân chung gọi là Linux
Bảng liệt kê trên ánh xạ các hệ điều hành tới các nhân tương ứng của chúng. Mối quan hệ này biến
661, điều này có thể hữu ích khi bạn có mã liên quan đến nhân cùng với mã dành riêng cho một bản phân phối Linux nhất định
Một phần hành vi quan trọng cần lưu ý trong ví dụ trên là khi bạn lặp lại trực tiếp phép liệt kê, các bí danh không được xem xét. Nếu bạn cần lặp lại tất cả các thành viên, bao gồm cả bí danh, thì bạn cần sử dụng
661 chia sẻ cùng một giá trị, điều này không được phép
Làm việc với bảng liệt kê trong Python
Cho đến thời điểm này, bạn đã biết kiểu liệt kê là gì, khi nào nên sử dụng chúng và bạn nhận được những lợi ích gì khi sử dụng chúng trong mã của mình. Bạn cũng đã tìm hiểu cách tạo kiểu liệt kê trong Python bằng cách sử dụng lớp
Bây giờ là lúc để bạn bắt đầu tìm hiểu cách thức hoạt động của các phép liệt kê trong Python và cách bạn có thể sử dụng chúng trong mã của mình
Loại bỏ các quảng cáo
Truy cập thành viên liệt kê
Khi nói đến việc sử dụng kiểu liệt kê trong mã của bạn, việc truy cập các thành viên của chúng là thao tác cơ bản để thực hiện. Bạn sẽ có ba cách khác nhau để truy cập các thành viên liệt kê trong Python
Dòng được đánh dấu đầu tiên trong ví dụ này cho thấy cách bạn có thể truy cập một thành viên enum bằng cách sử dụng ký hiệu dấu chấm, khá trực quan và dễ đọc. Dòng được đánh dấu thứ hai truy cập thành viên đích bằng cách gọi phép liệt kê với giá trị của thành viên làm đối số
Ghi chú. Điều quan trọng cần lưu ý là việc gọi một phép liệt kê với giá trị của thành viên làm đối số có thể khiến bạn cảm thấy như mình đang khởi tạo phép liệt kê. Tuy nhiên, không thể khởi tạo kiểu liệt kê, như bạn đã biết
674 nếu bạn cố gắng làm điều đó. Do đó, bạn không được nhầm lẫn giữa việc khởi tạo với việc truy cập các thành viên thông qua lệnh gọi liệt kê
Cuối cùng, dòng được đánh dấu thứ ba cho biết cách bạn có thể sử dụng ký hiệu giống như từ điển hoặc ký hiệu chỉ số dưới để truy cập thành viên bằng cách sử dụng tên của thành viên làm khóa đích
Bảng liệt kê của Python cung cấp sự linh hoạt tuyệt vời để bạn truy cập các thành viên. Ký hiệu dấu chấm được cho là cách tiếp cận được sử dụng phổ biến nhất trong mã Python. Tuy nhiên, hai cách tiếp cận khác cũng có thể hữu ích. Vì vậy, hãy sử dụng ký hiệu đáp ứng nhu cầu, quy ước và phong cách cụ thể của bạn
Sử dụng thuộc tính >>> from enum import Enum
>>> class Grade(Enum):
.. A = 90
.. B = 80
.. C = 70
.. D = 60
.. F = 0
...
>>> list(Grade)
[
<Grade.A: 90>,
<Grade.B: 80>,
<Grade.C: 70>,
<Grade.D: 60>,
<Grade.F: 0>
]
675 và >>> from enum import Enum
>>> class Grade(Enum):
.. A = 90
.. B = 80
.. C = 70
.. D = 60
.. F = 0
...
>>> list(Grade)
[
<Grade.A: 90>,
<Grade.B: 80>,
<Grade.C: 70>,
<Grade.D: 60>,
<Grade.F: 0>
]
676
Các thành viên của một bảng liệt kê Python là các thể hiện của lớp chứa chúng. Trong quá trình phân tích cú pháp lớp enum, mỗi thành viên sẽ tự động được cung cấp một thuộc tính
676 như bạn làm với một thuộc tính thông thường, sử dụng ký hiệu dấu chấm. Xem xét ví dụ sau, mô phỏng một semaphore, thường được gọi là đèn giao thông
676 của thành viên enum cho phép bạn truy cập trực tiếp vào tên của thành viên dưới dạng chuỗi và giá trị của thành viên, tương ứng. Các thuộc tính này rất hữu ích khi bạn lặp qua các phép liệt kê của mình, bạn sẽ khám phá các thuộc tính này trong phần tiếp theo
Lặp lại thông qua liệt kê
Một tính năng đáng chú ý của kiểu liệt kê Python so với các lớp thông thường là kiểu liệt kê có thể lặp lại theo mặc định. Vì chúng có thể lặp lại nên bạn có thể sử dụng chúng trong vòng lặp
Loại kỹ thuật lặp này trông khá giống với lặp qua từ điển. Vì vậy, nếu bạn đã quen thuộc với phép lặp từ điển, thì việc lặp qua các phép liệt kê bằng kỹ thuật này sẽ là một nhiệm vụ đơn giản với nhiều trường hợp sử dụng tiềm năng
Ngoài ra, các kiểu liệt kê có một thuộc tính đặc biệt được gọi là
662 mà bạn cũng có thể sử dụng để lặp lại các phần tử của chúng. Thuộc tính này chứa một từ điển ánh xạ tên cho các thành viên. Sự khác biệt giữa việc lặp qua từ điển này và trực tiếp qua phép liệt kê là từ điển cho phép bạn truy cập vào tất cả các thành viên của phép liệt kê, bao gồm tất cả các bí danh mà bạn có thể có
662 chứa một từ điển thông thường nên bạn có thể sử dụng tất cả các kỹ thuật lặp áp dụng cho loại dữ liệu tích hợp này. Một số kỹ thuật này bao gồm sử dụng các phương pháp từ điển như
201 tương đối mới là những vị trí phổ biến và được cho là tự nhiên mà bạn có thể sử dụng kiểu liệt kê. Cả hai cấu trúc đều cho phép bạn thực hiện các hành động khác nhau tùy thuộc vào các điều kiện nhất định
Ví dụ: giả sử bạn có một đoạn mã xử lý semaphore hoặc đèn giao thông trong ứng dụng điều khiển giao thông. Bạn phải thực hiện các hành động khác nhau tùy thuộc vào ánh sáng hiện tại của semaphore. Trong tình huống này, bạn có thể sử dụng phép liệt kê để thể hiện đèn hiệu và đèn của nó. Sau đó, bạn có thể sử dụng một chuỗi câu lệnh
699. Sử dụng một trong hai kỹ thuật là một vấn đề của hương vị và phong cách. Cả hai kỹ thuật đều hoạt động tốt và có thể so sánh về khả năng đọc. Tuy nhiên, lưu ý rằng nếu bạn cần đảm bảo khả năng tương thích ngược với các phiên bản Python thấp hơn 3. 10, thì bạn phải sử dụng các câu lệnh
201, nhưng bạn phải nhớ rằng các câu lệnh này không mở rộng tốt. Nếu bạn thêm các thành viên mới vào bảng liệt kê mục tiêu của mình, thì bạn sẽ cần cập nhật chức năng xử lý để xem xét các thành viên mới này
Việc so sánh danh tính dựa trên thực tế là mỗi thành viên enum là một thể hiện đơn lẻ của lớp liệt kê của nó. Đặc điểm này cho phép so sánh danh tính nhanh chóng và rẻ tiền của các thành viên bằng cách sử dụng toán tử
Mỗi thành viên enum có danh tính riêng, khác với danh tính của các thành viên anh chị em của nó. Quy tắc này không áp dụng cho các bí danh của thành viên vì chúng chỉ là tham chiếu đến các thành viên hiện có và chia sẻ cùng một danh tính. Đây là lý do tại sao so sánh
Lý do cho kết quả giả này là các thành viên của các enum khác nhau là các thể hiện độc lập với danh tính riêng của chúng, vì vậy bất kỳ kiểm tra danh tính nào đối với chúng đều trả về
Như bạn đã biết, các thành viên enum luôn có một giá trị cụ thể có thể là một số, một chuỗi hoặc bất kỳ đối tượng nào khác. Do đó, việc so sánh bình đẳng giữa các thành viên enum và các đối tượng chung có thể rất hấp dẫn.
Tuy nhiên, kiểu so sánh này không hoạt động như mong đợi vì so sánh thực tế dựa trên nhận dạng đối tượng
236. Điều này là do các thành viên enum thông thường so sánh theo danh tính đối tượng thay vì theo giá trị. Trong ví dụ trên, bạn đang so sánh các thành viên enum với số nguyên, giống như so sánh táo và cam. Họ sẽ không bao giờ so sánh ngang nhau, bởi vì họ có bản sắc khác nhau
5, đây là những kiểu liệt kê đặc biệt có thể được so sánh với số nguyên
Cuối cùng, một tính năng liên quan đến so sánh khác của phép liệt kê là bạn có thể thực hiện kiểm tra tư cách thành viên trên chúng bằng cách sử dụng toán tử
247 theo mặc định. Sử dụng các toán tử này, bạn có thể kiểm tra xem một thành viên nhất định có mặt trong một liệt kê nhất định hay khôngLoại bỏ các quảng cáo
Sắp xếp liệt kê
Theo mặc định, enum của Python không hỗ trợ các toán tử so sánh như
675 của nó. Bằng cách này, bạn có thể sắp xếp liệt kê theo tên của các thành viên của nó
Mở rộng bảng liệt kê với hành vi mới
Trong các phần trước, bạn đã học cách tạo và sử dụng kiểu liệt kê trong mã Python của mình. Cho đến thời điểm này, bạn đã làm việc với kiểu liệt kê mặc định. Điều này có nghĩa là bạn chỉ sử dụng các kiểu liệt kê của Python với các tính năng và hành vi tiêu chuẩn của chúng.
Đôi khi, bạn có thể cần cung cấp bảng liệt kê của mình với hành vi tùy chỉnh. Để làm điều này, bạn có thể thêm các phương thức vào enum của mình và triển khai chức năng cần thiết. Bạn cũng có thể sử dụng các lớp mixin. Trong các phần sau, bạn sẽ tìm hiểu cách tận dụng cả hai kỹ thuật để tùy chỉnh bảng liệt kê của mình
Thêm và tinh chỉnh các phương thức thành viên
Bạn có thể cung cấp cho các phép liệt kê của mình chức năng mới bằng cách thêm các phương thức mới vào các lớp liệt kê của bạn giống như bạn làm với bất kỳ lớp Python thông thường nào. Kiểu liệt kê là các lớp có các tính năng đặc biệt. Giống như các lớp thông thường, kiểu liệt kê có thể có các phương thức và phương thức đặc biệt
Xem xét ví dụ sau, được điều chỉnh từ tài liệu Python
265 bị ràng buộc với các trường hợp chứa enum của chúng, đó là các thành viên enum. Vì vậy, bạn phải gọi các phương thức thông thường trên các thành viên enum hơn là trên chính lớp enum
Ghi chú. Hãy nhớ rằng không thể khởi tạo kiểu liệt kê của Python. Các thành viên của một bảng liệt kê là các trường hợp được phép của bảng liệt kê. Vì vậy, tham số
268 là một phương thức lớp, hoạt động trên chính lớp hoặc kiểu liệt kê. Các phương thức lớp như thế này cung cấp quyền truy cập vào tất cả các thành viên enum từ bên trong lớp
Bạn cũng có thể tận dụng khả năng này để chứa hành vi bổ sung khi cần triển khai mẫu chiến lược. Ví dụ: giả sử bạn cần một lớp cho phép bạn sử dụng hai chiến lược để sắp xếp danh sách các số theo thứ tự tăng dần và giảm dần. Trong trường hợp này, bạn có thể sử dụng một kiểu liệt kê như sau
254 tích hợp sẵn để sắp xếp các giá trị đầu vào theo thứ tự tăng dần hoặc giảm dần, tùy thuộc vào thành viên được gọi
Ghi chú. Ví dụ trên nhằm mục đích là một ví dụ minh họa về việc sử dụng enum để triển khai mẫu thiết kế chiến lược. Trong thực tế, không cần thiết phải tạo
279, các số sẽ được sắp xếp theo thứ tự giảm dần. Đó là nó. Bạn đã sử dụng một bảng liệt kê để nhanh chóng triển khai mẫu thiết kế chiến lượcLoại bỏ các quảng cáo
Trộn bảng liệt kê với các loại khác
Python hỗ trợ đa kế thừa như một phần của các tính năng hướng đối tượng của nó. Điều này có nghĩa là trong Python, bạn có thể kế thừa nhiều lớp khi tạo phân cấp lớp. Đa kế thừa hữu ích khi bạn muốn sử dụng lại chức năng từ nhiều lớp cùng một lúc
Một thực tế phổ biến trong lập trình hướng đối tượng là sử dụng cái được gọi là lớp mixin. Các lớp này cung cấp chức năng mà các lớp khác có thể sử dụng. Trong Python, bạn có thể thêm các lớp mixin vào danh sách cha của một lớp nhất định để tự động nhận chức năng mixin
Ví dụ: giả sử bạn muốn có một phép liệt kê hỗ trợ so sánh số nguyên. Trong trường hợp này, bạn có thể sử dụng loại
676 của thành viên không giống với chính thành viên đó, mặc dù nó tương đương và sẽ so sánh như vậy. Đó là lý do tại sao bạn có thể so sánh trực tiếp các thành viên của
5 để tạo trực tiếp các bảng liệt kê có giá trị số nguyên. Bạn sẽ tìm hiểu thêm về lớp này trong phần Khám phá các lớp liệt kê khác
Ví dụ trên cho thấy rằng việc tạo các bảng liệt kê với các lớp mixin thường giúp ích rất nhiều khi bạn cần sử dụng lại một phần chức năng nhất định. Nếu bạn quyết định sử dụng kỹ thuật này trong một số enum của mình, thì bạn sẽ phải tuân theo chữ ký sau
Hãy nhớ rằng nếu bạn sử dụng một loại dữ liệu cụ thể trong danh sách các lớp mixin của mình, thì các giá trị thành viên phải khớp với loại của loại dữ liệu cụ thể này
7. Cả hai lớp sẽ cho phép bạn tạo các tập hợp liệt kê các hằng số mà bạn có thể kết hợp bằng cách sử dụng các toán tử bitwise. Trong phần sau, bạn sẽ khám phá các lớp này và cách chúng hoạt động trong Python
Xây dựng bảng liệt kê số nguyên. >>> from enum import Enum
>>> class Grade(Enum):
.. A = 90
.. B = 80
.. C = 70
.. D = 60
.. F = 0
...
>>> list(Grade)
[
<Grade.A: 90>,
<Grade.B: 80>,
<Grade.C: 70>,
<Grade.D: 60>,
<Grade.F: 0>
]
5
5 được tạo riêng để bao gồm trường hợp sử dụng này. Nếu bạn cần các thành viên trong bảng liệt kê của mình hoạt động giống như số nguyên, thì bạn nên kế thừa từ
600, phiên bản mới này có đầy đủ khả năng so sánh và hỗ trợ tất cả các toán tử so sánh. Bạn cũng có thể sử dụng trực tiếp các thành viên của lớp trong các phép toán số nguyên
600 sẽ tự động tìm cách chuyển đổi bất kỳ giá trị nào thuộc loại dữ liệu khác thành số nguyên. Nếu chuyển đổi này không thể thực hiện được thì bạn sẽ nhận được một
Trong đoạn mã này, bạn tạo một bảng liệt kê chứa một tập hợp vai trò người dùng trong một ứng dụng nhất định. Các thành viên của bảng liệt kê này chứa các giá trị số nguyên mà bạn có thể kết hợp bằng cách sử dụng toán tử OR theo bit (
6, còn được gọi là cờ, nên nhận các giá trị là lũy thừa của hai (1, 2, 4, 8, …). Tuy nhiên, đây không phải là yêu cầu đối với các tổ hợp cờ, chẳng hạn như
243 là sự kết hợp của các vai trò. Giá trị của nó là kết quả của việc áp dụng toán tử OR theo bit cho danh sách đầy đủ các vai trò trước đó trong phép liệt kê
6 cũng hỗ trợ các phép toán số nguyên, chẳng hạn như các phép toán số học và so sánh. Tuy nhiên, các loại hoạt động này trả về số nguyên chứ không phải đối tượng thành viên
280. Đó là lý do tại sao bạn có thể sử dụng chúng trong các biểu thức liên quan đến số nguyên. Trong những tình huống này, giá trị kết quả sẽ là một số nguyên chứ không phải là thành viên enum
Phép liệt kê của Python có thể giúp bạn cải thiện khả năng đọc và tổ chức mã của mình. Bạn có thể sử dụng chúng để nhóm các hằng số tương tự mà sau đó bạn có thể sử dụng trong mã của mình để thay thế các chuỗi, số và các giá trị khác bằng các tên có ý nghĩa và dễ đọc
Trong các phần sau, bạn sẽ viết mã một vài ví dụ thực tế xử lý các trường hợp sử dụng enum phổ biến. Những ví dụ này sẽ giúp bạn quyết định khi nào mã của bạn có thể hưởng lợi từ việc sử dụng kiểu liệt kê
Thay thế số ma thuật
Phép liệt kê rất hữu ích khi bạn cần thay thế các bộ số ma thuật có liên quan, chẳng hạn như mã trạng thái HTTP, cổng máy tính và mã thoát. Với kiểu liệt kê, bạn có thể nhóm các hằng số này và gán cho chúng các tên dễ đọc và mô tả mà bạn có thể sử dụng và tái sử dụng trong mã của mình sau này
Giả sử bạn có chức năng sau như một phần của ứng dụng truy xuất và xử lý nội dung HTTP trực tiếp từ web
271 đóng kết nối đang hoạt động để tránh rò rỉ tài nguyên
Mặc dù mã này hoạt động, nhưng có thể khó đọc và hiểu đối với những người không quen với mã trạng thái HTTP và ý nghĩa tương ứng của chúng. Để khắc phục những vấn đề này và làm cho mã của bạn dễ đọc và dễ bảo trì hơn, bạn có thể sử dụng một phép liệt kê để nhóm các mã trạng thái HTTP và đặt tên mô tả cho chúng
647 vào ứng dụng của bạn. Nhóm enum này mã trạng thái HTTP mục tiêu và đặt cho chúng những cái tên dễ đọc. Nó cũng làm cho chúng không đổi một cách nghiêm ngặt, giúp ứng dụng của bạn đáng tin cậy hơn
259, bạn sử dụng các tên mô tả và dễ đọc để cung cấp thông tin về ngữ cảnh và nội dung. Giờ đây, bất kỳ ai đọc mã của bạn sẽ biết ngay rằng tiêu chí đối sánh là mã trạng thái HTTP. Họ cũng sẽ nhanh chóng phát hiện ra ý nghĩa của từng mã mục tiêuLoại bỏ các quảng cáo
Tạo một máy trạng thái
Một trường hợp sử dụng thú vị khác của phép liệt kê là khi bạn sử dụng chúng để tạo lại các trạng thái khác nhau có thể có của một hệ thống nhất định. Nếu hệ thống của bạn có thể ở chính xác một trong số các trạng thái hữu hạn tại bất kỳ thời điểm nào, thì hệ thống của bạn hoạt động như một cỗ máy trạng thái. Bảng liệt kê rất hữu ích khi bạn cần triển khai mẫu thiết kế phổ biến này
Như một ví dụ về cách sử dụng enum để triển khai mẫu máy trạng thái, bạn tạo trình giả lập trình phát đĩa tối thiểu. Để bắt đầu, hãy tiếp tục và tạo một tệp
280 thực hiện tất cả các hành động có thể mà trình phát của bạn có thể thực hiện, bao gồm đưa và đẩy đĩa ra, phát, tạm dừng và dừng trình phát. Lưu ý cách mỗi phương thức trong
Đầu ra của lệnh này cho thấy rằng ứng dụng của bạn đã trải qua tất cả các trạng thái có thể. Tất nhiên, ví dụ này là tối thiểu và không xem xét tất cả các tình huống có thể xảy ra. Đó là một ví dụ minh họa về cách bạn có thể sử dụng phép liệt kê để triển khai mẫu máy trạng thái trong mã của mình
Sự kết luận
Bây giờ bạn đã biết cách tạo và sử dụng kiểu liệt kê trong Python. Enumerations, hay chỉ enums, là kiểu dữ liệu thông dụng và phổ biến trong nhiều ngôn ngữ lập trình. Với phép liệt kê, bạn có thể nhóm các tập hợp các hằng số liên quan và truy cập chúng thông qua chính phép liệt kê
Python không cung cấp cú pháp enum chuyên dụng. Tuy nhiên, mô-đun
Với tất cả kiến thức này, giờ bạn đã sẵn sàng bắt đầu sử dụng enum của Python để nhóm, đặt tên và xử lý các tập hợp các hằng số liên quan đến ngữ nghĩa. Phép liệt kê cho phép bạn tổ chức mã của mình tốt hơn, làm cho mã dễ đọc, rõ ràng và dễ bảo trì hơn
Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để xây dựng bảng liệt kê trong Python
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Leodanis Pozo Ramos
Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác
» Tìm hiểu thêm về Leodanis
Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Bartosz
Geir Arne
kate
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ Email
Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi
Chúng tôi có thể in enum dưới dạng danh sách có thể lặp lại .
What is enum value?
Kiểu liệt kê (hoặc kiểu enum) là một loại giá trị được xác định bởi một tập hợp các hằng số được đặt tên thuộc loại số tích phân cơ sở . Để xác định kiểu liệt kê, hãy sử dụng từ khóa enum và chỉ định tên của các thành viên enum. Sao chép C#.