Python Enum so với lớp dữ liệu
Trong bài viết này, bạn sẽ tìm hiểu enums là gì, cách tạo và làm việc với chúng. Hơn nữa, bạn sẽ tìm hiểu lý do tại sao bạn nên sử dụng chúng thường xuyên hơn trong mã hóa hàng ngày của mình Show
Thông tinCác đoạn mã được sử dụng trong bài viết có thể được tìm thấy trên GitHub Enum là gì?enum là viết tắt của enumeration và đề cập đến một tập hợp các tên tượng trưng, được gọi là thành viên liệt kê. Các thành viên enum này bị ràng buộc với các giá trị không đổi, duy nhất. Bạn có thể lặp lại một phép liệt kê và so sánh các thành viên của nó theo danh tính (toán tử 5 của Python)Đoạn mã sau đây cho bạn thấy một ví dụ đơn giản về một enum 6
Chúng tôi đã nhập lớp 7 từ mô-đun 8 của Python. Nó phục vụ như một lớp cơ sở để xác định kiểu liệt kê mới trong Python. Sau đó, một enum mới gọi là 6 được triển khai có ba thành viên enum. 0, 1 và 2
Hãy xem cách enums hoạt động khi được sử dụng
Chúng tôi đã mở rộng tập lệnh 3 bằng cách tạo một phiên bản mới của 4 và gán nó cho biến 5. Hơn nữa, chúng tôi in biểu diễn chuỗi của 4, tên và giá trị của nó. Ngoài ra, chúng tôi so sánh danh tính của 5 với 4 và 9
Chạy tập lệnh cho thấy rằng 5 thực sự là một phiên bản của 4 với tên là 0 và giá trị là 13
Lặp lại các thành viên của một EnumPhép liệt kê có một thuộc tính đặc biệt được gọi là 16, là ánh xạ tên và thành viên được sắp xếp theo thứ tự chỉ đọc. Việc sử dụng 16 cho phép bạn lặp lại một enum và in các thành viên cũng như tên tương ứng của chúng
1Bạn có thể tự hỏi tại sao chúng tôi không làm điều gì đó như 8Đối với ví dụ hiện tại, cả hai cách tiếp cận đều tạo ra cùng một kết quả. Tuy nhiên, nếu bạn có một phép liệt kê cũng có bí danh, thì chỉ có cách tiếp cận sử dụng 16 mới in ra cả bí danh. Kiểm tra ví dụ sau 0 1Giá trị tự độngTrong ví dụ trước, chúng tôi đã gán số nguyên cho các tên tượng trưng 0, 1 và 2. Nếu các giá trị chính xác không quan trọng, bạn có thể sử dụng hàm 82. Hàm gọi nội bộ 83 và tạo các giá trị cho bạn 7Nó chọn một giá trị phù hợp cho từng thành viên enum, sẽ (hầu hết thời gian) là các số nguyên mà chúng ta đã sử dụng trước đây 8Tuy nhiên, chức năng 83 có thể được ghi đè để tạo ra các giá trị mới theo cách bạn muốn 0 1Mở rộng một EnumLà các lớp Python, enums có thể có bất kỳ phương thức (đặc biệt) nào giống như tất cả các lớp khác. Xem xét ví dụ sau 2Chúng tôi đã mở rộng 6 enum bằng phương pháp mới 86 in một chuỗi được tạo dựa trên giá trị của thành viên. Hơn nữa, chúng tôi ghi đè lên phương pháp dunder của 87 để trả về tên của thành viên nếu được gọi 3Các loại Enums trong PythonBên cạnh 7, Python cung cấp ba kiểu liệt kê dẫn xuất sẵn có
Chúng tôi sẽ xem xét cả ba người trong số họ. Hãy nhớ rằng bạn có thể tự do triển khai các phép liệt kê dẫn xuất của riêng mình dựa trên 7. Việc triển khai kiểu liệt kê của riêng bạn sẽ không được đề cập trong bài viết# colour.py from enum import Enum class Colour(Enum): RED = 1 GREEN = 2 BLUE = 3 89Chúng tôi đã biết rằng chúng tôi có thể so sánh các thành viên enum bằng toán tử nhận dạng của Python. Tuy nhiên, lớp 7 không cung cấp các phép so sánh theo thứ tự mặc dù các số nguyên được sử dụng làm giá trị cho các phần tử liệt kê. Hãy cùng xem ví dụ sau 4Thực thi tập lệnh trong tay dẫn đến một 05 5Điều duy nhất bạn có thể làm là sử dụng các phép so sánh bình đẳng như 06 và 07. Ngoài ra, không hỗ trợ so sánh các thành viên enum với bất kỳ giá trị không liệt kê nàoTuy nhiên, kiểu liệt kê dẫn xuất 89 không cung cấp các phép so sánh có thứ tự vì nó cũng là một lớp con của 09. Để làm cho ví dụ của chúng tôi hoạt động, chúng tôi cần nhập lớp 89 thay vì 7 và lấy 6 từ lớp đó. Chúng tôi không cần phải thay đổi bất cứ điều gì khác 6 7$ python colour.py Colour.RED RED 1 True False 00Lớp 00 khá giống với lớp 89, ngoại trừ lớp này cũng hỗ trợ các thao tác theo bit. Với việc hỗ trợ các hoạt động bitwise, ý tôi là có thể kết hợp hai thành viên enum dẫn đến thành viên 00. Tất cả các hoạt động khác trên thành viên 00 sẽ dẫn đến việc mất tư cách thành viên 00Hãy xem một ví dụ. Giả sử rằng chúng tôi cấp quyền cho người dùng để họ có thể đọc, viết và/hoặc thực thi một tệp nhất định. Chúng tôi tạo một liệt kê 19 với các thành viên lần lượt là 70 (quyền đọc), 71 (quyền ghi) và 72 (quyền thực thi)Nếu chúng tôi có một người dùng, người này phải có quyền đọc và ghi đối với một tệp nhất định, chúng tôi có thể kết hợp cả hai bằng cách sử dụng toán tử 73 8 9$ python colour.py Colour.RED RED 1 True False 01Lớp 01 cũng cung cấp hỗ trợ cho các hoạt động theo bit nhưng không kế thừa từ 09. Trên thực tế, nó giống như 7 nhưng có hỗ trợ cho các hoạt động theo bitNếu chúng ta lấy 6 enum ngay từ đầu, chúng ta có thể dễ dàng trộn màu trắng dựa trên ba màu còn lại 0 1Tại sao tôi cần Enum?Tại thời điểm này, chúng ta đã hiểu enums là gì và cách chúng ta có thể tạo chúng trong Python. Hơn nữa, chúng tôi có thể so sánh và làm việc với họ. Tuy nhiên, chúng ta vẫn chưa biết tại sao chúng ta cần và nên sử dụng kiểu liệt kê thường xuyên hơn Các ví dụ chúng tôi đã xem khá đơn giản. Mặc dù kiểu liệt kê 19 có vẻ khá hữu ích nhưng kiểu liệt kê 6 thì không. Tại sao bạn lại sử dụng các bảng liệt kê này trong mã của mình?Hãy xem đoạn mã Python sau 2Chúng ta đã định nghĩa một hàm, lấy một đối tượng 81 và trả về một chuỗi dựa trên mã trạng thái của đối tượng 81 được cung cấp. Bạn có thể biết rằng 404 là mã trạng thái của Không tìm thấy, nhưng bạn có biết ý nghĩa của 502 và 400 không?Đây chỉ là hai mã trạng thái ít được biết đến và còn nhiều mã khác nữa. Thật khó để đọc và hiểu mã nếu không tìm kiếm trên web. Đây là nơi liệt kê phát huy tác dụng. Chúng ta có thể triển khai phép liệt kê tùy chỉnh của riêng mình để mang lại nhiều ý nghĩa hơn cho mã 3Ở đây, một 89 được sử dụng vì chúng tôi muốn có thể so sánh các phần tử của nó với các số nguyên. Bây giờ, chức năng từ trước trông như thế này 4Về bản chất, nếu bạn có các số ma thuật trong mã của mình, bạn chắc chắn nên cân nhắc gán chúng cho một biến hoặc nhóm chúng lại với nhau thành một phép liệt kê. Bằng cách này, khả năng đọc mã của bạn tăng lên rất nhiều. Điều này đặc biệt đúng nếu bạn muốn viết bài kiểm tra cho mã của mình Thông tinVí dụ 84 được sử dụng để minh họa, trong đó enum hữu ích. Tuy nhiên, trong một kịch bản thực tế, bạn không cần tạo một bảng liệt kê 84 tùy chỉnh vì một bảng liệt kê được bao gồm trong mô-đun http. Nó được đặt tên là 86. là một liên kết đến phần tài liệu Python tương ứngTóm lượcXin chúc mừng, bạn đã thực hiện nó thông qua bài viết. Trong khi đọc bài viết, bạn đã biết enums là gì và cách bạn có thể tạo chúng trong Python. Hơn nữa, bạn đã học cách so sánh và làm việc với chúng. Bạn đã xem qua một số ví dụ và hiểu tại sao thỉnh thoảng nên sử dụng kiểu liệt kê Tôi hy vọng bạn thích đọc bài viết. Hãy chia sẻ nó với bạn bè và đồng nghiệp của bạn. Bạn có thông tin phản hồi? . Bạn có thể liên hệ với tôi qua biểu mẫu liên hệ hoặc các nguồn khác được liệt kê trong phần liên hệ Nếu bạn chưa có, hãy cân nhắc theo dõi tôi trên Twitter, nơi tôi là @DahlitzF hoặc đăng ký nhận bản tin của tôi. Luôn tò mò và tiếp tục viết mã Bạn có nên sử dụng enums trong Python?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.
Tại sao nên sử dụng enum thay vì dict Python?Enum được sử dụng để tạo một tập hợp các hằng số liên quan . Từ điển được sử dụng để lưu trữ các giá trị dữ liệu trong khóa. cặp giá trị. Enum tương tự như một mảng. Từ điển không cho phép trùng lặp.
Một enum trong Python là gì?Mã nguồn. Lib/enum. py. Một phép liệt kê là một tập hợp các tên tượng trưng (thành viên) đượ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 thành viên có thể được so sánh bằng danh tính và bản thân phép liệt kê có thể được lặp lại.
Là lớp enum hay kiểu dữ liệu?Kiểu enum là kiểu dữ liệu đặc biệt cho phép một biến trở thành một tập hợp các hằng số được xác định trước. |