Python sử dụng enum trong dataclass

Enum là một lớp trong python để tạo các bảng 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. Các thành viên của một phép liệt kê có thể được so sánh bằng các anme tượng trưng này và bản thân phép liệt kê có thể được lặp đi lặp lại. Một enum có các đặc điểm sau

  • Các enums là biểu diễn chuỗi có thể đánh giá được của một đối tượng còn được gọi là repr[]

  • Tên của enum được hiển thị bằng từ khóa 'tên'

  • Sử dụng type[] chúng ta có thể kiểm tra các loại enum

Ví dụ

import enum
# Using enum class create enumerations
class Days[enum.Enum]:
   Sun = 1
   Mon = 2
   Tue = 3
# print the enum member as a string
print ["The enum member as a string is : ",end=""]
print [Days.Mon]

# print the enum member as a repr
print ["he enum member as a repr is : ",end=""]
print [repr[Days.Sun]]

# Check type of enum member
print ["The type of enum member is : ",end =""]
print [type[Days.Mon]]

# print name of enum member
print ["The name of enum member is : ",end =""]
print [Days.Tue.name]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue

In enum dưới dạng có thể lặp lại

Chúng ta có thể in enum dưới dạng danh sách có thể lặp lại. Trong đoạn mã dưới đây, chúng tôi sử dụng vòng lặp for để in tất cả các thành viên enum

Ví dụ

import enum
# Using enum class create enumerations
class Days[enum.Enum]:
   Sun = 1
   Mon = 2
   Tue = 3
# printing all enum members using loop
print ["The enum members are : "]
for weekday in [Days]:
   print[weekday]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

The enum members are :
Days.Sun
Days.Mon
Days.Tue

Băm enums

Các thành viên trong Bảng liệt kê có thể băm được, do đó chúng có thể được sử dụng trong từ điển và bộ. trong ví dụ dưới đây, chúng tôi thấy quá trình băm đang hoạt động và kiểm tra xem quá trình băm có thành công không

Ví dụ

import enum
# Using enum class create enumerations
class Days[enum.Enum]:
   Sun = 1
   Mon = 2
# Hashing to create a dictionary
Daytype = {}
Daytype[Days.Sun] = 'Sun God'
Daytype[Days.Mon] = 'Moon God'

# Checkign if the hashing is successful
print[Daytype =={Days.Sun:'Sun God',Days.Mon:'Moon God'}]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

True

Truy cập enum

Chúng tôi có thể truy cập các thành viên enum bằng cách sử dụng tên hoặc giá trị của các mục thành viên. Trong ví dụ dưới đây, trước tiên chúng tôi truy cập giá trị theo tên nơi chúng tôi sử dụng tên của enu làm chỉ mục

Python 3 đã xuất hiện được một thời gian và hầu hết các nhà phát triển - đặc biệt là những người lần đầu tiên chọn lập trình - đã sử dụng nó. Nhưng trong khi có rất nhiều tính năng mới xuất hiện với Python 3, có vẻ như nhiều tính năng trong số đó chưa được biết đến hoặc chưa được sử dụng đúng mức. Trong bài viết hôm nay, tôi sẽ nói về ba tính năng ít được biết đến nhưng rất hữu ích. Chúng là những tính năng mà tôi đã biết và yêu thích ở các ngôn ngữ khác mà tôi thực sự nghĩ làm cho Python 3 trở nên tuyệt vời

phép liệt kê

Enums là thứ tôi đã sử dụng rất nhiều trong Java và Swift và việc tôi sử dụng chúng đã mở rộng sang Python

Khai báo một enum trong Python rất dễ dàng và cũng có thể được thực hiện trước Python 3 [mặc dù có nhiều chức năng hạn chế hơn]

Trong đoạn mã trên, bạn có thể thấy một enum được khai báo dễ dàng bằng cách khai báo một lớp và biến nó thành một lớp con của Enum. Từ đó, bạn chỉ cần xác định từng trạng thái của mình trong các dòng sau

Trong trường hợp của tôi, tôi đã có sẵn AIR, LANDSEA

Chức năng đã được thêm vào trong Python 3 là khả năng thực hiện

The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
0 và
The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
1. Những thứ đó sẽ cho phép bạn lấy giá trị số nguyên được liên kết với trạng thái hoặc chuỗi được liên kết với nó

Trong đoạn mã trên, in

The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
2 sẽ trả về LAND, vì vậy chức năng không chỉ là một số nguyên

Enums hữu ích trong mã khi bạn muốn biểu diễn mô tả các hằng số. Ví dụ: thay vì kiểm tra xem một tiểu bang là

The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
4 hay
The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
5, tốt hơn hết là kiểm tra xem đó là AIR0 hay AIR1. Các hằng số của bạn có thể thay đổi và nếu ai đó đang xem mã của bạn, thì AIR2 có ý nghĩa hơn nhiều so với
The enum member as a string is : Days.Mon
he enum member as a repr is :
The type of enum member is :
The name of enum member is : Tue
4. Kết quả là, khả năng đọc được cải thiện rất nhiều

Để đọc thêm, hãy xem tài liệu Python 3 chính thức trên Enum tại đây

Định dạng

Đã thêm vào Python 3. 6, AIR5 là một cách tuyệt vời để định dạng văn bản. Chúng cung cấp khả năng đọc tốt hơn nhiều và ít bị lỗi hơn [điều mà tôi chắc chắn thích, đến từ các ngôn ngữ như Java]

AIR5 là một cách dễ đọc hơn so với AIR7 được sử dụng trước đây trong Python. Đây là một ví dụ về việc sử dụng AIR7

Như bạn có thể thấy, chúng tôi có các dấu ngoặc trống thông qua chuỗi và sau đó, chúng tôi liệt kê tên của từng biến theo thứ tự

Bây giờ, hãy sử dụng cùng một mã nhưng sử dụng AIR9, nó dễ đọc hơn nhiều và rất giống với định dạng chuỗi trong Swift

Để thực hiện chuỗi sạch hơn này, chúng tôi chỉ cần mở đầu các trích dẫn của mình bằng chữ cái LAND0 và sau đó thay vì có các dấu ngoặc trống, chúng tôi đặt biến hoặc dữ liệu trực tiếp vào các dấu ngoặc đơn. Vì chính các biến được viết trong ngoặc nên bạn không cần phải đếm số mục được viết theo định dạng để tìm ra biến nào được đặt ở đâu — các biến tồn tại ngay tại nơi chúng sẽ được đặt

Thực hiện AIR5 tạo ra mã dễ đọc và đáng tin cậy hơn nhiều so với thực hiện điều gì đó như nối chuỗi hoặc định dạng chuỗi

Lớp dữ liệu

Các lớp dữ liệu có thể là một chủ đề khó hiểu hơn so với các chủ đề khác mà tôi đã đề cập, vì vậy tôi sẽ giải thích ngắn gọn về chúng. Các lớp dữ liệu là thứ mà tôi thực sự thích trong Kotlin, vì vậy tôi cũng thực sự muốn thử sử dụng chúng trong Python

Một lớp dữ liệu thực sự là một lớp có mục đích duy nhất là giữ dữ liệu theo nghĩa đen. Lớp sẽ có các biến có thể được truy cập và ghi vào, nhưng không có logic bổ sung nào ở trên nó

Hãy tưởng tượng bạn có một chương trình và bạn chuyển một chuỗi và một dãy số giữa các lớp khác nhau. Bạn chỉ có thể có các phương thức như LAND2, nhưng cách tiếp cận tốt hơn nhiều là tạo một lớp dữ liệu chỉ chứa một chuỗi dưới dạng một trường và một mảng

Bằng cách tạo một lớp dữ liệu, những gì bạn đang làm sẽ rõ ràng hơn nhiều và việc kiểm tra đơn vị cũng sẽ dễ dàng hơn

Tôi sẽ đưa ra một ví dụ về cách tạo một lớp dữ liệu đơn giản biểu diễn một vectơ ba chiều, nhưng điều này có thể dễ dàng được mở rộng để biểu diễn bất kỳ sự kết hợp nào của các dữ liệu khác nhau

Ở đây, bạn có thể thấy định nghĩa của một lớp dữ liệu rất giống với khai báo một lớp bình thường, ngoại trừ chúng ta sử dụng LAND3 trước nó và sau đó mỗi trường được khai báo như LAND4

Mặc dù chức năng của LAND5 do chúng tôi tạo ra bị hạn chế, mục đích của lớp dữ liệu chỉ là tăng hiệu quả và giảm lỗi trong mã của bạn. Sẽ tốt hơn nhiều nếu chuyển khoảng một biến LAND5 hơn là biến LAND7

Để biết thêm chi tiết về LAND3, hãy xem tài liệu Python 3 chính thức tại đây

Phần kết luận

Nếu bạn đã thử bất kỳ tính năng mới nào trong số này, hãy cho tôi biết trong phần nhận xét. Tôi muốn nghe các trường hợp sử dụng khác nhau của bạn dành cho họ. Mã hóa vui vẻ

Chủ Đề