Hướng dẫn python 3 iterate enum - python 3 lặp lại enum

Kiểm tra kỹ năng lập trình của bạn với bài kiểm tra của W3Resource.

Show

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Thành viên là trường hợp của lớp
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 của họ và thường được truy cập là
>>> print(Color.RED.name)
RED
885. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(Color.RED.name)
RED
886, nhưng bạn không bao giờ nên làm điều này vì tra cứu đó có thể thất bại hoặc tệ hơn, trả lại một cái gì đó ngoài thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mà bạn đang tìm ):
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
3

Tên riêng sẽ là các thuộc tính bình thường trong Python 3.11 thay vì lỗi hoặc thành viên (tùy thuộc vào việc tên kết thúc bằng dấu gạch dưới). Sử dụng các tên này trong 3.10 sẽ phát hành

>>> print(Color.RED.name)
RED
881. Lib/enum.py


>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Kiểu thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
4
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Thành viên là trường hợp của lớp
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 của họ và thường được truy cập là
>>> print(Color.RED.name)
RED
885. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(Color.RED.name)
RED
886, nhưng bạn không bao giờ nên làm điều này vì tra cứu đó có thể thất bại hoặc tệ hơn, trả lại một cái gì đó ngoài thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mà bạn đang tìm ):

Ghi chú

Trường hợp của các thành viên enum

Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.

Mới trong phiên bản 3.4.

Mã nguồn: lib/enum.py

Một liệt kê là một tập hợp các tên biểu tượng (thành viên) bị ràng buộc với các giá trị duy nhất, không đổi. Trong một bảng 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 việc liệt kê có thể được lặp lại.

Ghi chú

Trường hợp của các thành viên enum

Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.

Mới trong phiên bản 3.4.

Mã nguồn: lib/enum.py

Một liệt kê là một tập hợp các tên biểu tượng (thành viên) bị ràng buộc với các giá trị duy nhất, không đổi. Trong một bảng 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 việc liệt kê có thể được lặp lại.

Nội dung mô -đun

Mô -đun này xác định bốn lớp liệt kê có thể được sử dụng để xác định các bộ tên và giá trị duy nhất:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 và
>>> print(Color.RED.name)
RED
0. Nó cũng xác định một người trang trí,
>>> print(Color.RED.name)
RED
1 và một người trợ giúp,
>>> print(Color.RED.name)
RED
2.()

Lớp ________ 73 ________ 74¶

Lớp cơ sở để tạo các hằng số được liệt kê. Xem phần API chức năng cho một cú pháp xây dựng thay thế.

Lớp ________ 73 ________ 76¶

Lớp cơ sở để tạo các hằng số được liệt kê cũng là các lớp con của

>>> print(Color.RED.name)
RED
7.()

Lớp ________ 73 ________ 79¶

Lớp cơ sở để tạo các hằng số được liệt kê có thể được kết hợp bằng cách sử dụng các toán tử bitwise mà không mất tư cách thành viên
>>> print(Color.RED.name)
RED
0 của họ.
>>> print(Color.RED.name)
RED
0 Thành viên cũng là các lớp con của
>>> print(Color.RED.name)
RED
7.

Lớp ________ 73 ________ 84¶

Lớp cơ sở để tạo các hằng số được liệt kê có thể được kết hợp bằng cách sử dụng các hoạt động bitwise mà không mất tư cách thành viên

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
4

Ghi chú

Trường hợp của các thành viên enum

Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.

Ghi chú

Trường hợp của các thành viên enum

  • Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.

  • Mới trong phiên bản 3.4.

    Mã nguồn: lib/enum.py
  • Mã nguồn: lib/enum.py

Một liệt kê là một tập hợp các tên biểu tượng (thành viên) bị ràng buộc với các giá trị duy nhất, không đổi. Trong một bảng 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 việc liệt kê có thể được lặp lại.

Nội dung mô -đun

Mô -đun này xác định bốn lớp liệt kê có thể được sử dụng để xác định các bộ tên và giá trị duy nhất:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 và
>>> print(Color.RED.name)
RED
0. Nó cũng xác định một người trang trí,
>>> print(Color.RED.name)
RED
1 và một người trợ giúp,
>>> print(Color.RED.name)
RED
2.

>>> print(Color.RED.name)
RED
7.
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
2

Lớp ________ 73 ________ 74¶

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>

Lớp cơ sở để tạo các hằng số được liệt kê. Xem phần API chức năng cho một cú pháp xây dựng thay thế.

Lớp ________ 73 ________ 76¶

Lớp ________ 73 ________ 76¶

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8

Lớp cơ sở để tạo các hằng số được liệt kê cũng là các lớp con của

>>> print(Color.RED.name)
RED
7.()

Lớp ________ 73 ________ 79¶

Lớp ________ 73 ________ 84¶

Lớp cơ sở để tạo các hằng số được liệt kê có thể được kết hợp bằng cách sử dụng các hoạt động bitwise mà không mất tư cách thành viên

>>> print(Color.RED.name)
RED
10

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 của chúng.

>>> print(Color.RED.name)
RED
11

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9,
>>> print(Color.RED.name)
RED
0,
>>> print(Color.RED.name)
RED
2

>>> print(Color.RED.name)
RED
12

________ 73 ________ 87 ()

Người trang trí lớp Enum đảm bảo chỉ có một tên bị ràng buộc với bất kỳ một giá trị nào.

>>> print(Color.RED.name)
RED
13

Mô -đun này xác định bốn lớp liệt kê có thể được sử dụng để xác định các bộ tên và giá trị duy nhất:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 và
>>> print(Color.RED.name)
RED
0. Nó cũng xác định một người trang trí,
>>> print(Color.RED.name)
RED
1 và một người trợ giúp,
>>> print(Color.RED.name)
RED
2.

Ghi chú

Trường hợp của các thành viên enum

Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.

Mới trong phiên bản 3.4.

Mã nguồn: lib/enum.py

Một liệt kê là một tập hợp các tên biểu tượng (thành viên) bị ràng buộc với các giá trị duy nhất, không đổi. Trong một bảng 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 việc liệt kê có thể được lặp lại.

>>> print(Color.RED.name)
RED
15

Nội dung mô -đun

Mô -đun này xác định bốn lớp liệt kê có thể được sử dụng để xác định các bộ tên và giá trị duy nhất:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 và
>>> print(Color.RED.name)
RED
0. Nó cũng xác định một người trang trí,
>>> print(Color.RED.name)
RED
1 và một người trợ giúp,
>>> print(Color.RED.name)
RED
2.

>>> print(Color.RED.name)
RED
2:
>>> print(Color.RED.name)
RED
16

Lớp ________ 73 ________ 74¶

Lớp cơ sở để tạo các hằng số được liệt kê. Xem phần API chức năng cho một cú pháp xây dựng thay thế.

Ghi chú

Lớp ________ 73 ________ 76¶

Lớp cơ sở để tạo các hằng số được liệt kê cũng là các lớp con của
>>> print(Color.RED.name)
RED
7.()

Ghi chú

Lớp ________ 73 ________ 76¶

Lớp cơ sở để tạo các hằng số được liệt kê cũng là các lớp con của
>>> print(Color.RED.name)
RED
7.()

Lớp ________ 73 ________ 79¶

Sự lặp lại

>>> print(Color.RED.name)
RED
18

Lặp lại các thành viên của một enum không cung cấp các bí danh:

>>> print(Color.RED.name)
RED
19

Thuộc tính đặc biệt

>>> print(Color.RED.name)
RED
115 là một bản đồ tên chỉ được đọc cho các thành viên. Nó bao gồm tất cả các tên được xác định trong bảng liệt kê, bao gồm các bí danh:
>>> print(Color.RED.name)
RED
80

Thuộc tính Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 15 có thể được sử dụng để truy cập chương trình chi tiết cho các thành viên liệt kê. Ví dụ: tìm tất cả các bí danh:

So sánh lor

>>> print(Color.RED.name)
RED
81

Các thành viên liệt kê được so sánh bằng danh tính:

>>> print(Color.RED.name)
RED
82

So sánh được đặt hàng giữa các giá trị liệt kê không được hỗ trợ. Các thành viên enum không phải là số nguyên (nhưng xem intenum bên dưới):

>>> print(Color.RED.name)
RED
83

So sánh bình đẳng được xác định mặc dù:

>>> print(Color.RED.name)
RED
84

So sánh với các giá trị không kích thích sẽ luôn so sánh không bằng nhau (một lần nữa, >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 8 được thiết kế rõ ràng để hoạt động khác nhau, xem bên dưới):

Các thành viên được phép và các thuộc tính của bảng liệt kê Jo

Các ví dụ trên sử dụng số nguyên cho các giá trị liệt kê. Sử dụng số nguyên ngắn và tiện dụng (và được cung cấp theo mặc định bởi API chức năng), nhưng không được thực thi nghiêm ngặt. Trong phần lớn các trường hợp sử dụng, người ta không quan tâm đến giá trị thực tế của một liệt kê là gì. Nhưng nếu giá trị là quan trọng, bảng liệt kê có thể có các giá trị tùy ý.

>>> print(Color.RED.name)
RED
85

Then:

>>> print(Color.RED.name)
RED
86

Các bảng liệt kê là các lớp Python, và có thể có các phương pháp và phương pháp đặc biệt như bình thường. Nếu chúng ta có sự liệt kê này:

Các quy tắc cho những gì được cho phép như sau: các tên bắt đầu và kết thúc với một dấu gạch dưới được bảo lưu bởi enum và không thể được sử dụng; Tất cả các thuộc tính khác được xác định trong một bảng liệt kê sẽ trở thành thành viên của liệt kê này, ngoại trừ các phương pháp đặc biệt (

>>> print(Color.RED.name)
RED
126,
>>> print(Color.RED.name)
RED
127, v.v.), các mô tả (Phương pháp cũng là mô tả) và tên biến được liệt kê trong
>>> print(Color.RED.name)
RED
128.

Lưu ý: Nếu liệt kê của bạn xác định Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 29 và/hoặc Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 30 thì bất kỳ giá trị nào được trao cho thành viên Enum sẽ được chuyển vào các phương thức đó. Xem hành tinh để biết một ví dụ.

Các lớp con enum bị hạn chế

>>> print(Color.RED.name)
RED
87

Một lớp

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mới phải có một lớp enum cơ sở, tối đa một loại dữ liệu cụ thể và nhiều lớp mixin dựa trên ____ 132 khi cần thiết. Thứ tự của các lớp cơ sở này là:
>>> print(Color.RED.name)
RED
88

Ngoài ra, phân lớp một liệt kê chỉ được phép nếu việc liệt kê không xác định bất kỳ thành viên nào. Vì vậy, điều này bị cấm:

>>> print(Color.RED.name)
RED
89

Nhưng điều này được cho phép:

Cho phép phân lớp các enum xác định các thành viên sẽ dẫn đến vi phạm một số bất biến quan trọng của các loại và trường hợp. Mặt khác, thật hợp lý khi cho phép chia sẻ một số hành vi phổ biến giữa một nhóm các liệt kê. (Xem đặt hàng cho một ví dụ.)

Nước ngâm

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
40

Tái lập có thể được ngâm và không được giải thích:

Ghi chú

Mục tiêu của phương thức

>>> print(Color.RED.name)
RED
118 mặc định là cung cấp trình tự
>>> print(Color.RED.name)
RED
7 tiếp theo với trình tự
>>> print(Color.RED.name)
RED
7 cuối cùng được cung cấp, nhưng cách nó thực hiện đây là một chi tiết triển khai và có thể thay đổi.

Phương pháp

>>> print(Color.RED.name)
RED
118 phải được xác định trước bất kỳ thành viên nào.

Sự lặp lại

Lặp lại các thành viên của một enum không cung cấp các bí danh:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
41

Thuộc tính đặc biệt

>>> print(Color.RED.name)
RED
115 là một bản đồ tên chỉ được đọc cho các thành viên. Nó bao gồm tất cả các tên được xác định trong bảng liệt kê, bao gồm các bí danh:
>>> print(Color.RED.name)
RED
80

Thuộc tính Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 15 có thể được sử dụng để truy cập chương trình chi tiết cho các thành viên liệt kê. Ví dụ: tìm tất cả các bí danh:

So sánh lor

So sánh lor

Các thành viên liệt kê được so sánh bằng danh tính:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
43

So sánh được đặt hàng giữa các giá trị liệt kê không được hỗ trợ. Các thành viên enum không phải là số nguyên (nhưng xem intenum bên dưới):

So sánh bình đẳng được xác định mặc dù:

So sánh với các giá trị không kích thích sẽ luôn so sánh không bằng nhau (một lần nữa, >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 8 được thiết kế rõ ràng để hoạt động khác nhau, xem bên dưới):

Các thành viên được phép và các thuộc tính của bảng liệt kê Jo

Các ví dụ trên sử dụng số nguyên cho các giá trị liệt kê. Sử dụng số nguyên ngắn và tiện dụng (và được cung cấp theo mặc định bởi API chức năng), nhưng không được thực thi nghiêm ngặt. Trong phần lớn các trường hợp sử dụng, người ta không quan tâm đến giá trị thực tế của một liệt kê là gì. Nhưng nếu giá trị là quan trọng, bảng liệt kê có thể có các giá trị tùy ý.

Các bảng liệt kê là các lớp Python, và có thể có các phương pháp và phương pháp đặc biệt như bình thường. Nếu chúng ta có sự liệt kê này:

Các quy tắc cho những gì được cho phép như sau: các tên bắt đầu và kết thúc với một dấu gạch dưới được bảo lưu bởi enum và không thể được sử dụng; Tất cả các thuộc tính khác được xác định trong một bảng liệt kê sẽ trở thành thành viên của liệt kê này, ngoại trừ các phương pháp đặc biệt (

>>> print(Color.RED.name)
RED
126,
>>> print(Color.RED.name)
RED
127, v.v.), các mô tả (Phương pháp cũng là mô tả) và tên biến được liệt kê trong
>>> print(Color.RED.name)
RED
128.

Lưu ý: Nếu liệt kê của bạn xác định Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 29 và/hoặc Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 30 thì bất kỳ giá trị nào được trao cho thành viên Enum sẽ được chuyển vào các phương thức đó. Xem hành tinh để biết một ví dụ.

Các lớp con enum bị hạn chế

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
46

Một lớp

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mới phải có một lớp enum cơ sở, tối đa một loại dữ liệu cụ thể và nhiều lớp mixin dựa trên ____ 132 khi cần thiết. Thứ tự của các lớp cơ sở này là:
>>> print(Color.RED.name)
RED
88

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
47

hoặc một bản đồ:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
48Mô -đun

Tên của mô -đun nơi có thể tìm thấy lớp Enum mới.

tên gọi

nơi có thể tìm thấy lớp enum mới.

loại hình

Nhập để trộn vào lớp Enum mới.

bắt đầu

Số để bắt đầu đếm tại nếu chỉ có tên được truyền vào.

Thay đổi trong phiên bản 3.5: Tham số bắt đầu đã được thêm vào.The start parameter was added.The start parameter was added.

Có nguồn gốc từ

Intenum¶

Biến thể đầu tiên của

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 được cung cấp cũng là một lớp con của
>>> print(Color.RED.name)
RED
7. Các thành viên của
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8 có thể được so sánh với các số nguyên; Bằng cách mở rộng, các loại thuốc của các loại khác nhau cũng có thể được so sánh với nhau:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
49

Tuy nhiên, họ vẫn có thể được so sánh với các liệt kê

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 tiêu chuẩn:
>>> print(Color.RED.name)
RED
40
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8 Các giá trị hoạt động như số nguyên theo những cách khác mà bạn mong đợi:
>>> print(Color.RED.name)
RED
41

Intflag¶

Biến thể tiếp theo của

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 được cung cấp,
>>> print(Color.RED.name)
RED
0, cũng dựa trên
>>> print(Color.RED.name)
RED
7. Sự khác biệt là
>>> print(Color.RED.name)
RED
0 Các thành viên có thể được kết hợp bằng cách sử dụng các toán tử bitwise (&, |, ^, ~) và kết quả vẫn là thành viên
>>> print(Color.RED.name)
RED
0. Tuy nhiên, như tên gọi,
>>> print(Color.RED.name)
RED
0 Các thành viên cũng phân lớp
>>> print(Color.RED.name)
RED
7 và có thể được sử dụng bất cứ nơi nào sử dụng
>>> print(Color.RED.name)
RED
7. Bất kỳ hoạt động nào trên thành viên
>>> print(Color.RED.name)
RED
0 bên cạnh các hoạt động bit khôn ngoan sẽ mất tư cách thành viên
>>> print(Color.RED.name)
RED
0.

Mới trong phiên bản 3.6.

Mẫu

>>> print(Color.RED.name)
RED
0 Lớp:
>>> print(Color.RED.name)
RED
42

Cũng có thể đặt tên cho các kết hợp:

>>> print(Color.RED.name)
RED
43

Một sự khác biệt quan trọng khác giữa

>>> print(Color.RED.name)
RED
0 và
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
>>> print(Color.RED.name)
RED
143:
>>> print(Color.RED.name)
RED
44

Bởi vì

>>> print(Color.RED.name)
RED
0 Các thành viên cũng là các lớp con của
>>> print(Color.RED.name)
RED
7 nên họ có thể được kết hợp với họ:
>>> print(Color.RED.name)
RED
45

Lá cờ¶

Biến thể cuối cùng là

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9. Giống như
>>> print(Color.RED.name)
RED
0,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 Thành viên có thể được kết hợp bằng cách sử dụng các toán tử bitwise (&, |, ^, ~). Không giống như
>>> print(Color.RED.name)
RED
0, chúng không thể được kết hợp với, cũng như không so sánh với bất kỳ liệt kê
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 nào khác, cũng không phải
>>> print(Color.RED.name)
RED
7. Mặc dù có thể chỉ định các giá trị trực tiếp nhưng nó được khuyến nghị sử dụng
>>> print(Color.RED.name)
RED
2 làm giá trị và để
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 chọn một giá trị thích hợp.

Mới trong phiên bản 3.6.

Mẫu

>>> print(Color.RED.name)
RED
0 Lớp:
>>> print(Color.RED.name)
RED
42

Cũng có thể đặt tên cho các kết hợp:

>>> print(Color.RED.name)
RED
47

Một sự khác biệt quan trọng khác giữa

>>> print(Color.RED.name)
RED
0 và
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
>>> print(Color.RED.name)
RED
143:
>>> print(Color.RED.name)
RED
44

Bởi vì

>>> print(Color.RED.name)
RED
0 Các thành viên cũng là các lớp con của
>>> print(Color.RED.name)
RED
7 nên họ có thể được kết hợp với họ:
>>> print(Color.RED.name)
RED
45

Lá cờ¶

Biến thể cuối cùng là

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9. Giống như
>>> print(Color.RED.name)
RED
0,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 Thành viên có thể được kết hợp bằng cách sử dụng các toán tử bitwise (&, |, ^, ~). Không giống như
>>> print(Color.RED.name)
RED
0, chúng không thể được kết hợp với, cũng như không so sánh với bất kỳ liệt kê
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 nào khác, cũng không phải
>>> print(Color.RED.name)
RED
7. Mặc dù có thể chỉ định các giá trị trực tiếp nhưng nó được khuyến nghị sử dụng
>>> print(Color.RED.name)
RED
2 làm giá trị và để
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 chọn một giá trị thích hợp.

>>> print(Color.RED.name)
RED
0 Lớp:
>>> print(Color.RED.name)
RED
46

>>> print(Color.RED.name)
RED
0 và
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
>>> print(Color.RED.name)
RED
143:
>>> print(Color.RED.name)
RED
48

>>> print(Color.RED.name)
RED
0 Các thành viên cũng là các lớp con của
>>> print(Color.RED.name)
RED
7 nên họ có thể được kết hợp với họ:

  1. Biến thể cuối cùng là >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 9. Giống như >>> print(Color.RED.name) RED 0, >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 9 Thành viên có thể được kết hợp bằng cách sử dụng các toán tử bitwise (&, |, ^, ~). Không giống như >>> print(Color.RED.name) RED 0, chúng không thể được kết hợp với, cũng như không so sánh với bất kỳ liệt kê >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 9 nào khác, cũng không phải >>> print(Color.RED.name) RED 7. Mặc dù có thể chỉ định các giá trị trực tiếp nhưng nó được khuyến nghị sử dụng >>> print(Color.RED.name) RED 2 làm giá trị và để >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 9 chọn một giá trị thích hợp.

  2. Giống như

    >>> print(Color.RED.name)
    RED
    
    0, nếu sự kết hợp của
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    9 Thành viên dẫn đến không có cờ nào được thiết lập, thì đánh giá Boolean là
    >>> print(Color.RED.name)
    RED
    
    143:
    >>> print(Color.RED.name)
    RED
    
    49
  3. Cờ riêng lẻ nên có các giá trị là sức mạnh của hai (1, 2, 4, 8, phạm), trong khi các kết hợp cờ giành được:

  4. Đặt tên cho điều kiện của No No Flags Set không thay đổi giá trị boolean của nó:

    Ghi chú
  5. Đối với phần lớn mã mới,

    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    7 và
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    9 được khuyến nghị mạnh mẽ, vì
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    8 và
    >>> print(Color.RED.name)
    RED
    
    0 phá vỡ một số lời hứa ngữ nghĩa về một liệt kê (bằng cách so sánh với các số nguyên, và do đó bằng cách chuyển tiếp đến các bảng điều khiển không liên quan khác).
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    8 và
    >>> print(Color.RED.name)
    RED
    
    0 chỉ nên được sử dụng trong trường hợp
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    7 và
    >>> type(Color.RED)
    
    >>> isinstance(Color.GREEN, Color)
    True
    >>>
    
    9 sẽ không làm; Ví dụ, khi các hằng số nguyên được thay thế bằng các liệt kê hoặc cho khả năng tương tác với các hệ thống khác.

    Khác¶

Khi nào nên sử dụng Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 29 so với ________ 130¶

>>> print(Color.RED.name)
RED
129 phải được sử dụng bất cứ khi nào bạn muốn tùy chỉnh giá trị thực của thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7. Bất kỳ sửa đổi nào khác có thể đi trong
>>> print(Color.RED.name)
RED
129 hoặc
>>> print(Color.RED.name)
RED
130, với
>>> print(Color.RED.name)
RED
130 được ưu tiên.

Ví dụ: nếu bạn muốn chuyển một số mục cho hàm tạo, nhưng chỉ muốn một trong số chúng là giá trị:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
20

Ví dụ thú vị

Trong khi

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7,
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8,
>>> print(Color.RED.name)
RED
0 và
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
9 dự kiến ​​sẽ bao gồm phần lớn các trường hợp sử dụng, họ không thể bao gồm tất cả. Dưới đây là các công thức nấu ăn cho một số loại bảng liệt kê khác nhau có thể được sử dụng trực tiếp hoặc làm ví dụ để tạo một bản thân riêng.

Bỏ qua các giá trị

Trong nhiều trường hợp sử dụng, người ta không quan tâm đến giá trị thực tế của một bảng liệt kê là gì. Có một số cách để xác định loại liệt kê đơn giản này:

  • Sử dụng các trường hợp

    >>> print(Color.RED.name)
    RED
    
    2 cho giá trị
  • Sử dụng các trường hợp

    >>> print(Color.RED.name)
    RED
    
    2 cho giá trị
  • >>> print(Color.RED.name)
    RED
    
    132 làm giá trị

  • Sử dụng chuỗi mô tả làm giá trị

    Sử dụng một tuple làm giá trị và tùy chỉnh

>>> print(Color.RED.name)
RED
129 để thay thế bộ tuple bằng giá trị

Sử dụng bất kỳ phương pháp nào trong số này biểu thị cho người dùng rằng các giá trị này không quan trọng và cũng cho phép người ta thêm, xóa hoặc sắp xếp lại các thành viên mà không phải đánh số lại các thành viên còn lại.

Bất cứ phương pháp nào bạn chọn, bạn nên cung cấp một

>>> print(Color.RED.name)
RED
825 cũng che giấu giá trị (không quan trọng):
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
21

Sử dụng ________ 72¶

Sử dụng

>>> print(Color.RED.name)
RED
2 sẽ giống như:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
22

Sử dụng ________ 72¶

Sử dụng

>>> print(Color.RED.name)
RED
2 sẽ giống như:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
22

Sử dụng ________ 132¶

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
24

>>> print(Color.RED.name)
RED
132 sẽ giống như:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
23

Sử dụng chuỗi mô tả

Sử dụng một chuỗi như giá trị sẽ trông như thế nào:

Sử dụng tùy chỉnh ____ 129¶

Sử dụng tự động đánh số

>>> print(Color.RED.name)
RED
129 sẽ giống như:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
25

Để tạo mục đích tổng quát hơn

>>> print(Color.RED.name)
RED
832, hãy thêm
>>> print(Color.RED.name)
RED
833 vào chữ ký:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
26

Sau đó, khi bạn kế thừa từ

>>> print(Color.RED.name)
RED
832, bạn có thể viết
>>> print(Color.RED.name)
RED
835 của riêng mình để xử lý bất kỳ đối số bổ sung nào:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
27

Ghi chú

Phương pháp

>>> print(Color.RED.name)
RED
129, nếu được xác định, được sử dụng trong quá trình tạo ra các thành viên ENUM; Sau đó, nó được thay thế bằng Enum từ
>>> print(Color.RED.name)
RED
129 được sử dụng sau khi tạo lớp để tra cứu các thành viên hiện tại.

Đặt hàng

Một liệt kê được đặt hàng không dựa trên

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
29

>>> print(Color.RED.name)
RED
832, hãy thêm
>>> print(Color.RED.name)
RED
833 vào chữ ký:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
26

Sau đó, khi bạn kế thừa từ

>>> print(Color.RED.name)
RED
832, bạn có thể viết
>>> print(Color.RED.name)
RED
835 của riêng mình để xử lý bất kỳ đối số bổ sung nào:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
27

Ghi chú

Phương pháp

>>> print(Color.RED.name)
RED
129, nếu được xác định, được sử dụng trong quá trình tạo ra các thành viên ENUM; Sau đó, nó được thay thế bằng Enum từ
>>> print(Color.RED.name)
RED
129 được sử dụng sau khi tạo lớp để tra cứu các thành viên hiện tại.

Đặt hàng

Một liệt kê được đặt hàng không dựa trên

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
1

>>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 8 và do đó duy trì các bất biến >>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 7 bình thường (chẳng hạn như không thể so sánh với các bảng liệt kê khác):>>> type(Color.RED) >>> isinstance(Color.GREEN, Color) True >>> 28

Trùng lặpfreeenum¶

Bị lỗi nếu tìm thấy tên thành viên trùng lặp thay vì tạo bí danh:

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
8 và do đó duy trì các bất biến
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 bình thường (chẳng hạn như không thể so sánh với các bảng liệt kê khác):
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
0

Đây là một ví dụ hữu ích để phân lớp enum để thêm hoặc thay đổi các hành vi khác cũng như không cho phép bí danh. Nếu sự thay đổi mong muốn duy nhất là không cho phép bí danh, người trang trí >>> print(Color.RED.name) RED 1 có thể được sử dụng thay thế.

Hành tinh¶

Nếu Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 29 hoặc Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 30 được xác định, giá trị của thành viên ENUM sẽ được chuyển sang các phương pháp đó:

Thời gian

Một ví dụ để hiển thị thuộc tính Afghanistan = 93 Albania = 355 Algeria = 213 Andorra = 376 Angola = 244 Antarctica = 672 28 đang sử dụng:

Enums khác nhau như thế nào? ¶

Enums có một metaclass tùy chỉnh ảnh hưởng đến nhiều khía cạnh của cả hai lớp Enum có nguồn gốc và các trường hợp (thành viên) của chúng.

Các lớp học Enum

  • Tốt hơn điểm¶

  • Được hỗ trợ

    >>> print(Color.RED.name)
    RED
    
    858 Tên
  • >>> print(Color.RED.name)
    RED
    
    115 là một bản đồ chỉ được đặt hàng của ____ ____ 260: ________ 261 các mục. Nó chỉ có sẵn trên lớp.
  • >>> print(Color.RED.name)
    RED
    
    129, nếu được chỉ định, phải tạo và trả lại các thành viên Enum; Đó cũng là một ý tưởng rất tốt để thiết lập thành viên
    >>> print(Color.RED.name)
    RED
    
    863 một cách thích hợp. Một khi tất cả các thành viên được tạo ra, nó không còn được sử dụng.
  • >>> print(Color.RED.name)
    RED
    
    872 - Được sử dụng trong mã Python 2/3 để đảm bảo thứ tự thành viên nhất quán (thuộc tính lớp, bị xóa trong quá trình tạo lớp)
  • >>> print(Color.RED.name)
    RED
    
    873 - Được API chức năng sử dụng và bằng
    >>> print(Color.RED.name)
    RED
    
    2 để có được giá trị phù hợp cho một thành viên enum; có thể bị ghi đè

Mới trong phiên bản 3.6:

>>> print(Color.RED.name)
RED
868,
>>> print(Color.RED.name)
RED
872,
>>> print(Color.RED.name)
RED
873

>>> print(Color.RED.name)
RED
868,
>>> print(Color.RED.name)
RED
872,
>>> print(Color.RED.name)
RED
873

Mới trong phiên bản 3.7:

>>> print(Color.RED.name)
RED
128

>>> print(Color.RED.name)
RED
128

Để giúp giữ mã Python 2 / Python 3 đồng bộ hóa một thuộc tính

>>> print(Color.RED.name)
RED
872 có thể được cung cấp. Nó sẽ được kiểm tra theo thứ tự thực tế của bảng liệt kê và gây ra lỗi nếu hai người không khớp:
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
2

Ghi chú

Trong mã Python 2, thuộc tính

>>> print(Color.RED.name)
RED
872 là cần thiết vì thứ tự định nghĩa bị mất trước khi có thể ghi lại.

_Private__names¶

Tên riêng sẽ là các thuộc tính bình thường trong Python 3.11 thay vì lỗi hoặc thành viên (tùy thuộc vào việc tên kết thúc bằng dấu gạch dưới). Sử dụng các tên này trong 3.10 sẽ phát hành

>>> print(Color.RED.name)
RED
881. will be normal attributes in Python 3.11 instead of either an error or a member (depending on if the name ends with an underscore). Using these names in 3.10 will issue a

>>> print(Color.RED.name)
RED
881.

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Kiểu thành viên

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Thành viên là trường hợp của lớp
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 của họ và thường được truy cập là
>>> print(Color.RED.name)
RED
885. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(Color.RED.name)
RED
886, nhưng bạn không bao giờ nên làm điều này vì tra cứu đó có thể thất bại hoặc tệ hơn, trả lại một cái gì đó ngoài thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mà bạn đang tìm ):
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
3

Ghi chú

Trong mã Python 2, thuộc tính

>>> print(Color.RED.name)
RED
872 là cần thiết vì thứ tự định nghĩa bị mất trước khi có thể ghi lại.

_Private__names¶

Tên riêng sẽ là các thuộc tính bình thường trong Python 3.11 thay vì lỗi hoặc thành viên (tùy thuộc vào việc tên kết thúc bằng dấu gạch dưới). Sử dụng các tên này trong 3.10 sẽ phát hành

>>> print(Color.RED.name)
RED
881. will be normal attributes in Python 3.11 instead of either an error or a member (depending on if the name ends with an underscore). Using these names in 3.10 will issue a

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Kiểu thành viên

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Thành viên là trường hợp của lớp
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 của họ và thường được truy cập là
>>> print(Color.RED.name)
RED
885. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(Color.RED.name)
RED
886, nhưng bạn không bao giờ nên làm điều này vì tra cứu đó có thể thất bại hoặc tệ hơn, trả lại một cái gì đó ngoài thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mà bạn đang tìm ):
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
3

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
5

Tên riêng sẽ là các thuộc tính bình thường trong Python 3.11 thay vì lỗi hoặc thành viên (tùy thuộc vào việc tên kết thúc bằng dấu gạch dưới). Sử dụng các tên này trong 3.10 sẽ phát hành
>>> print(Color.RED.name)
RED
881.

>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Kiểu thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
4
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 Thành viên là trường hợp của lớp
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 của họ và thường được truy cập là
>>> print(Color.RED.name)
RED
885. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(Color.RED.name)
RED
886, nhưng bạn không bao giờ nên làm điều này vì tra cứu đó có thể thất bại hoặc tệ hơn, trả lại một cái gì đó ngoài thành viên
>>> type(Color.RED)

>>> isinstance(Color.GREEN, Color)
True
>>>
7 mà bạn đang tìm ):

Ghi chú

Trong mã Python 2, thuộc tính

>>> print(Color.RED.name)
RED
872 là cần thiết vì thứ tự định nghĩa bị mất trước khi có thể ghi lại.

_Private__names¶Enumerations are iterable. They can be iterated using loops. In this example, we will use for loop to print all the members of the Enum class.

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.

Enums không thể có nhiều giá trị cho mỗi tên...

Bởi vì các enum đượ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 và sẽ sử dụng kiểu đó trong các ví dụ của chúng tôi.we recommend using UPPER_CASE names for enum members, and will be using that style in our examples.we recommend using UPPER_CASE names for enum members, and will be using that style in our examples.