Một Enum là một tập hợp các giá trị tĩnh, thường là các chuỗi hoặc số nguyên. Chúng được sử dụng khá thường xuyên - hoặc ít nhất chúng nên được. Tại Cashlink, chúng tôi thường sử dụng chúng để theo dõi các bước cho các quy trình dài hơn Show
Enums là một cách để nhóm các hằng số. Các hằng số rất hữu ích để ngăn lỗi chính tả vì trình soạn thảo của bạn có thể cảnh báo bạn khi một giá trị không phải là một phần của enum, nhưng nó không thể cảnh báo bạn rằng một chuỗi hoặc một số nguyên không hợp lệ. Nhóm các hằng số trong Enums mang lại cho bạn một số lợi thế Trước khi chúng ta đi sâu vào nó, hãy xem xét một số ứng dụng cho enums Ví dụ về Enum
Nhận hỗ trợ biên tập viênBạn luôn có thể chỉ cần sử dụng một hằng số. Nhưng khi bạn sử dụng trình chỉnh sửa, bạn thường muốn trình chỉnh sửa của mình tự động hoàn thành Trình bày đẹp khi inNên có một cách tốt để chuyển đổi nó thành một chuỗi. Ví dụ: khi bạn in mã trạng thái HTTP, tôi nghĩ NOT_FOUND tốt hơn nhiều so với 404 Lặp lại tất cả các giá trịMột enum là một tập hợp các giá trị tĩnh. Trong một số trường hợp, bạn muốn lặp lại tất cả chúng Kiểm tra toàn diệnTrong rất nhiều cơ sở mã, bạn có thể thấy mẫu này if value == 'a': Tôi cũng đã xem from enum import Enumclass HttpStatus(Enum):0 vì điều tương tự Tùy thuộc vào nguồn gốc của những giá trị đó, bạn có thể so sánh from enum import Enumclass HttpStatus(Enum):1 với một enum. Sau đó, mypy có thể thực hiện kiểm tra toàn diện, nghĩa là nó sẽ hiểu rằng có khả năng gặp phải ngoại lệ. Do đó, mypy có thể cảnh báo bạn rằng bạn thực sự đã quên một trường hợp So sánh có ý nghĩa ngữ nghĩaSo sánh giá trị thì dễ, nhưng so sánh ngữ nghĩa thì khó. Chúng tôi muốn so sánh những thứ cùng loại, không phải giá trị. Ví dụ: chúng tôi muốn so sánh xem khoản thanh toán chúng tôi nhận được có bằng số tiền chúng tôi mong đợi hay không. Nó phải ở trong cùng một đơn vị. Sẽ tạo ra sự khác biệt lớn nếu chúng ta mong đợi 1000 Euro hoặc 1000 Rupiah Indonesia. Nó cũng tạo ra sự khác biệt lớn đối với một số người nếu bạn nói về giới tính sinh học hoặc bản sắc tình dục. Điều này có nghĩa là hai biến có thể chứa chính xác cùng một giá trị, nhưng không thể so sánh được. Ít nhất chúng tôi mong đợi một sự so sánh để đánh giá from enum import Enumclass HttpStatus(Enum):2 Tuần tự hóa và giải tuần tự hóaChúng ta cần chuyển đổi dữ liệu thường xuyên sang JSON và ngược lại từ JSON. Pydantic khá tuyệt vời và luôn làm rất tốt việc ép buộc các giá trị phù hợp, nhưng hãy kiểm tra các tùy chọn đã cho xem chúng hoạt động tốt như thế nào số 1. Mô-đun Enum tích hợp Mô-đun enum đã được giới thiệu với Python 3. 4 qua PEP 435. Đó là điều đầu tiên xuất hiện trong đầu bạn khi bạn muốn tạo một Enum. from enum import Enumclass HttpStatus(Enum): Cờ số nguyên có thể được thực hiện với Nếu bạn muốn kiểm tra tính toàn diện, bạn có thể lấy cái này from typing import NoReturndef assert_never(value: NoReturn) -> NoReturn: Cung cấp cho bạn thông báo lỗi này $ mypy main.py Bạn có thể làm cho Enums có thể tuần tự hóa JSON, nhưng bạn phải suy nghĩ một chút Chuyển đổi Python Enum thành JSONMột cách đơn giản để tạo Python Enum dựa trên mã thông báo chuỗi JSON-serializable là kế thừa cả str và Enum…py. đồng hồ số 2. Thuộc tính lớp đơn giảnBạn có thể chỉ cần tạo một lớp và sử dụng các thuộc tính của nó class HttpStatus: Mặc dù những thứ như thế này vẫn còn phổ biến trong nhiều cơ sở mã, nhưng nhược điểm là rõ ràng
Bạn có thể đặt các giá trị trực tiếp trong một mô-đun, e. g from enum import Enumclass HttpStatus(Enum):3 NOT_FOUND = 404 Đây có lẽ là tùy chọn nhẹ nhất. Bạn vẫn có tất cả các nhược điểm Một ví dụ thực tế nơi điều này được thực hiện là Django Rest Framework với mã trạng thái HTTP ( nguồn ) số 4. mô hình Django. Lựa chọnDjango cũng có một số cách để tạo enums, e. g. from django.db import modelsclass HttpStatus(models.TextChoices): Ngoài ra còn có from enum import Enumclass HttpStatus(Enum):4 và from enum import Enumclass HttpStatus(Enum):5 Django TextChoices Enums thêm một số chức năng có thể hữu ích. Tôi khuyên bạn nên sử dụng chúng nếu bạn sử dụng Django. Chúng có thể được kết nối với Django ORM, điều này khá hay Các lựa chọn Django cũng có thể tuần tự hóa JSON trực tiếp số 5. đánh máy. nghĩa đenThe được giới thiệu trong PEP 586 như một cách để chỉ ra rằng một biến phải có một tập hợp các giá trị nhất định. Ví dụ, thay vì chỉ nói rằng một hàm sẽ trả về một số nguyên làm tham số, bạn có thể chú thích điều này from typing import LiteralStatusCode = Literal[404, 200, 500]def set_color(self, http_status_code: StatusCode):Bây giờ… tôi nên lấy cái nào đây? Trước tiên, hãy đảm bảo loại Enum đáp ứng nhu cầu của bạn Hình ảnh của Martin ThomaNgoài ra còn có một số lựa chọn khác
Tôi thích viết về phát triển phần mềm và công nghệ 🤩 Đừng bỏ lỡ các bản cập nhật. Nhận bản tin email miễn phí của tôi 📧 hoặc đăng ký Phương tiện ✍️ nếu bạn chưa làm điều đó - cả hai đều khuyến khích tôi viết nhiều hơn 🤗 Các enum có thể có cùng giá trị python không?CA1069. Các enum không được có các giá trị trùng lặp .
Tôi có nên sử dụng enums trong Python không?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 enum vào thư viện chuẩn.
Quy ước đặt tên cho enum Python là gì?AdvertisementsPython enum
. Mô-đun enum được sử dụng để tạo kiểu liệt kê trong Python. Bảng liệt kê được tạo bằng từ khóa lớp hoặc bằng API chức năng. begin with an uppercase letter and are singular. The enum module is used for creating enumerations in Python. Enumerations are created with the class keyword or with the functional API.
Làm thế nào để enum hoạt động trong Python?Một Enum 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ị duy nhất. Chúng tương tự như các biến toàn cục, nhưng chúng cung cấp một repr() , nhóm, an toàn kiểu và một số tính năng khác hữu ích hơn. Như bạn có thể thấy, tạo một Enum đơn giản như viết một lớp kế thừa từ chính Enum |