Python so sánh enum với int
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 enum import Enumclass HttpStatus(Enum):0 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 The đượ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 enum import Enumclass HttpStatus(Enum):3Bây giờ … tôi nên chọn cái nào? 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 🤗 Bạn có thể sử dụng == trên enums không?Vì chỉ có một thể hiện của mỗi hằng số enum, nên có thể sử dụng toán tử == thay cho phương thức bằng khi so sánh hai tham chiếu đối tượng nếu biết rằng . .
Giá trị enum có thể được so sánh?Có hai cách để so sánh các thành viên enum. phương thức equals sử dụng toán tử == bên trong để kiểm tra xem hai enum có bằng nhau hay không . Điều này có nghĩa là, Bạn có thể so sánh Enum bằng cả phương thức == và bằng.
Tương đương với enum trong Python là gì?StrEnum giống như Enum, nhưng các thành viên của nó cũng là các chuỗi và có thể được sử dụng ở hầu hết các vị trí mà chuỗi có thể được sử dụng.
Bạn có thể sử dụng một enum như một int?Không, chúng ta chỉ có thể có các chuỗi dưới dạng phần tử trong một phép liệt kê . |