Hướng dẫn whats an enum python? - con trăn enum là gì?

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

Show

Mã nguồn: lib/enum.py 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.

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:

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 và
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7. Nó cũng xác định một người trang trí,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
8 và một người trợ giúp,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9.

Lớp ________ 70 ________ 71¶

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 ________ 70 ________ 73¶

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

>>> Color(1)

>>> Color(3)

4.

Lớp ________ 70 ________ 76¶

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 của họ.
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 Thành viên cũng là các lớp con của
>>> Color(1)

>>> Color(3)

4.

Lớp ________ 70 ________ 81¶

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 của chúng.

________ 70 ________ 84 ()()

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.

Lớp ________ 70 ________ 86¶

Các trường hợp được thay thế bằng một giá trị thích hợp cho các thành viên Enum. Theo mặc định, giá trị ban đầu bắt đầu từ 1.

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9

Tạo một Enum¶

Các bảng liệt kê được tạo bằng cú pháp

>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
0, giúp chúng dễ đọc và viết. Một phương pháp tạo thay thế được mô tả trong API chức năng. Để xác định một liệt kê, lớp con
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 như sau:

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...

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.

  • 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:

    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    4,
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    5,
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    6 và
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    7. Nó cũng xác định một người trang trí,
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    8 và một người trợ giúp,
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    9.

Lớp ________ 70 ________ 71¶

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 ________ 70 ________ 73¶

>>> print(repr(Color.RED))

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

>>> Color(1)

>>> Color(3)

4.

>>> type(Color.RED)

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

Lớp ________ 70 ________ 76¶

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

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 của họ.
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 Thành viên cũng là các lớp con của
>>> Color(1)

>>> Color(3)

4.

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT

Lớp ________ 70 ________ 81¶

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True

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 >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 6 của chúng.

________ 70 ________ 84 ()

>>> Color(1)

>>> Color(3)

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.

>>> Color['RED']

>>> Color['GREEN']

Lớp ________ 70 ________ 86¶

>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1

Các trường hợp được thay thế bằng một giá trị thích hợp cho các thành viên Enum. Theo mặc định, giá trị ban đầu bắt đầu từ 1.

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9

>>> print(Color.RED)
Color.RED
0

Tạo một Enum¶

>>> print(Color.RED)
Color.RED
1

Ghi chú

Các bảng liệt kê được tạo bằng cú pháp

>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
0, giúp chúng dễ đọc và viết. Một phương pháp tạo thay thế được mô tả trong API chức năng. Để xác định một liệt kê, lớp con
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 như sau:

Giá trị thành viên enum

Giá trị thành viên có thể là bất cứ điều gì:

>>> Color(1)

>>> Color(3)

4,
>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
3, v.v. Phải cẩn thận nếu bạn trộn
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9 với các giá trị khác.

Danh pháp

Lớp

>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
6 là một liệt kê (hoặc enum)

>>> print(Color.RED)
Color.RED
2

Các thuộc tính >>> member = Color.RED >>> member.name 'RED' >>> member.value 1 7, >>> member = Color.RED >>> member.name 'RED' >>> member.value 1 8, v.v., là các thành viên liệt kê (hoặc thành viên enum) và là hằng số chức năng.

Các thành viên ENUM có tên và giá trị (tên của

>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
7 là
>>> print(Color.RED)
Color.RED
00, giá trị của
>>> print(Color.RED)
Color.RED
01 là
>>> print(Color.RED)
Color.RED
02, v.v.)

>>> print(Color.RED)
Color.RED
3

Các thành viên liệt kê có các biểu diễn chuỗi có thể đọc được của con người:

>>> print(Color.RED)
Color.RED
4

Ghi chú

>>> print(Color.RED)
Color.RED

Ghi chú

Phương pháp

>>> print(Color.RED)
Color.RED
15 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:

>>> print(Color.RED)
Color.RED
5

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

>>> print(Color.RED)
Color.RED
12 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)
Color.RED
6

Thuộc tính

>>> print(Color.RED)
Color.RED
12 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:

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

So sánh lor

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

>>> print(Color.RED)
Color.RED
8

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)
Color.RED
9

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

>>> print(repr(Color.RED))

0

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,

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5 được thiết kế rõ ràng để hoạt động khác nhau, xem bên dưới):

>>> print(repr(Color.RED))

1

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:

>>> print(repr(Color.RED))

2

Then:

>>> print(repr(Color.RED))

3

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)
Color.RED
23,
>>> print(Color.RED)
Color.RED
24, 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)
Color.RED
25.

Lưu ý: Nếu liệt kê của bạn xác định

>>> print(Color.RED)
Color.RED
26 và/hoặc
>>> print(Color.RED)
Color.RED
27 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ế

Một lớp

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 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 ____ 129 khi cần thiết. Thứ tự của các lớp cơ sở này là:

>>> print(repr(Color.RED))

4

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(repr(Color.RED))

5

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

>>> print(repr(Color.RED))

6

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

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

>>> print(repr(Color.RED))

7

Các hạn chế thông thường đối với Pickling áp dụng: Các enum có thể chọn phải được xác định ở cấp cao nhất của một mô -đun, vì việc không bị ràng buộc đòi hỏi chúng phải được nhập từ mô -đun đó.

Ghi chú

Với giao thức Pickle Phiên bản 4, có thể dễ dàng pickle enum lồng nhau trong các lớp khác.

Có thể sửa đổi cách các thành viên enum được ngâm/không được giải thích bằng cách xác định

>>> print(Color.RED)
Color.RED
30 trong lớp liệt kê.

API chức năng

Lớp

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 có thể gọi được, cung cấp API chức năng sau:

>>> print(repr(Color.RED))

8

Các ngữ nghĩa của API này giống với

>>> print(Color.RED)
Color.RED
32. Đối số đầu tiên của cuộc gọi đến
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 là tên của bảng liệt kê.

Đối số thứ hai là nguồn gốc của tên thành viên liệt kê. Nó có thể là một chuỗi các tên được phân tách bằng khoảng trắng, một chuỗi các tên, một chuỗi các bộ 2 với các cặp khóa/giá trị hoặc ánh xạ (ví dụ: từ điển) của các tên thành các giá trị. Hai tùy chọn cuối cùng cho phép gán các giá trị tùy ý cho các bảng điều khiển; Các số nguyên tăng tự động khác bắt đầu với 1 (sử dụng tham số

>>> print(Color.RED)
Color.RED
34 để chỉ định giá trị bắt đầu khác). Một lớp mới có nguồn gốc từ
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 được trả về. Nói cách khác, nhiệm vụ trên cho
>>> print(Color.RED)
Color.RED
36 tương đương với:

>>> print(repr(Color.RED))

9

Lý do mặc định đến

>>> print(Color.RED)
Color.RED
37 là số bắt đầu chứ không phải
>>> print(Color.RED)
Color.RED
38 là
>>> print(Color.RED)
Color.RED
38 là
>>> print(Color.RED)
Color.RED
40 theo nghĩa boolean, nhưng tất cả các thành viên enum đều đánh giá thành
>>> print(Color.RED)
Color.RED
41.

Các enum pickling được tạo bằng API chức năng có thể khó khăn vì các chi tiết triển khai ngăn xếp khung được sử dụng để thử và tìm ra mô -đun nào mà liệt kê được tạo trong (ví dụ: nó sẽ thất bại nếu bạn sử dụng chức năng tiện ích trong mô -đun riêng biệt và cũng có thể không hoạt động trên Ironpython hoặc Jython). Giải pháp là chỉ định tên mô -đun một cách rõ ràng như sau:

>>> type(Color.RED)

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

Cảnh báo

Nếu

>>> print(Color.RED)
Color.RED
42 không được cung cấp và enum không thể xác định nó là gì, các thành viên enum mới sẽ không thể không được biết đến; Để giữ lỗi gần hơn với nguồn, Pickling sẽ bị tắt.

Trong một số trường hợp, giao thức Pickle 4 mới, dựa vào

>>> print(Color.RED)
Color.RED
43 được đặt đến vị trí nơi Pickle sẽ có thể tìm thấy lớp. Ví dụ: nếu lớp học được cung cấp trong lớp một ngày nào đó trong phạm vi toàn cầu:

>>> type(Color.RED)

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

Chữ ký hoàn chỉnh là:

>>> type(Color.RED)

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

giá trị

Những gì lớp enum mới sẽ ghi lại như tên của nó.

Tên

Các thành viên enum. Đây có thể là một chuỗi khoảng trắng hoặc dấu phẩy (giá trị sẽ bắt đầu ở mức 1 trừ khi có quy định khác):

>>> type(Color.RED)

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

hoặc một người lặp của tên:

hoặc một trình lặp của các cặp (tên, giá trị):

>>> type(Color.RED)

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

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

>>> type(Color.RED)

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

Mô -đ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.

Có nguồn gốc từ

Intenum¶

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 được cung cấp cũng là một lớp con của
>>> Color(1)

>>> Color(3)

4. Các thành viên của
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5 có thể được so sánh với 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
>>>
6

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 tiêu chuẩn:

>>> type(Color.RED)

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5 Các giá trị hoạt động như số nguyên theo những cách khác mà bạn mong đợi:

>>> type(Color.RED)

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

Intflag¶

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 được cung cấp,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7, cũng dựa trên
>>> Color(1)

>>> Color(3)

4. Sự khác biệt là
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 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
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7. Tuy nhiên, như tên gọi,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 Các thành viên cũng phân lớp
>>> Color(1)

>>> Color(3)

4 và có thể được sử dụng bất cứ nơi nào sử dụng
>>> Color(1)

>>> Color(3)

4. Bất kỳ hoạt động nào trên một thành viên
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 bên cạnh các hoạt động bit khôn ngoan sẽ mất tư cách thành viên
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7.

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

Mẫu

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 Lớp:

>>> type(Color.RED)

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

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

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

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 và
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
>>> print(Color.RED)
Color.RED
40:

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

Bởi vì các thành viên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 cũng là các lớp con của
>>> Color(1)

>>> Color(3)

4, họ có thể được kết hợp với họ:

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

Lá cờ¶

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6. Giống như
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 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ư
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7, chúng không thể được kết hợp với, cũng không so sánh với bất kỳ liệt kê
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 nào khác, cũng không phải
>>> Color(1)

>>> Color(3)

4. 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
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9 làm giá trị và để
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 chọn một giá trị thích hợp.

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

Mẫu

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 Lớp:

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

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

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

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

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 và
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
>>> print(Color.RED)
Color.RED
40:

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

Bởi vì các thành viên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 cũng là các lớp con của
>>> Color(1)

>>> Color(3)

4, họ có thể được kết hợp với họ:

Lá cờ¶

Biến thể cuối cùng là >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 6. Giống như >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 7, >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 6 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ư >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 7, chúng không thể được kết hợp với, cũng không so sánh với bất kỳ liệt kê >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 6 nào khác, cũng không phải >>> Color(1) >>> Color(3) 4. 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 >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 9 làm giá trị và để >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 6 chọn một giá trị thích hợp.

Giống như

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7, nếu sự kết hợp của các thành viên
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 sẽ không có cờ nào được thiết lập, thì đánh giá Boolean là
>>> print(Color.RED)
Color.RED
40:

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

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:

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

  1. Ghi chú

  2. Đối với phần lớn mã mới,

    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    4 và
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    6 được khuyến nghị mạnh mẽ, vì
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    5 và
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    7 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).
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    5 và
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    7 chỉ nên được sử dụng trong trường hợp
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    4 và
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    6 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.

  3. Khác¶

  4. Mặc dù

    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    5 là một phần của mô -đun
    >>> print(Color.RED)
    Color.RED
    
    85, nhưng sẽ rất đơn giản để thực hiện độc lập:

  5. Điều này cho thấy làm thế nào các liệt kê có nguồn gốc tương tự có thể được xác định; Ví dụ,

    >>> print(Color.RED)
    Color.RED
    
    86 trộn trong
    >>> member = Color.RED
    >>> member.name
    'RED'
    >>> member.value
    1
    
    3 thay vì
    >>> Color(1)
    
    >>> Color(3)
    
    
    4.,
    >>> print(Color.RED)
    Color.RED
    
    98, and
    >>> print(Color.RED)
    Color.RED
    
    99 will use the mixed-in type’s
    >>> print(repr(Color.RED))
    
    
    00 unless
    >>> print(Color.RED)
    Color.RED
    
    23 or
    >>> print(repr(Color.RED))
    
    
    00 is overridden in the subclass, in which case the overridden methods or
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    4 methods will be used. Use the !s and !r format codes to force usage of the
    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    4 class’s
    >>> print(Color.RED)
    Color.RED
    
    23 and
    >>> print(Color.RED)
    Color.RED
    
    97 methods.

Khi nào nên sử dụng >>> print(Color.RED) Color.RED 26 so với ________ 127¶

>>> print(Color.RED)
Color.RED
26 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
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4. Bất kỳ sửa đổi nào khác có thể đi trong
>>> print(Color.RED)
Color.RED
26 hoặc
>>> print(Color.RED)
Color.RED
27, với
>>> print(Color.RED)
Color.RED
27 đượ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ị:

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

Ví dụ thú vị

Trong khi

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5,
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
7 và
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
6 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

    >>> apples = {}
    >>> apples[Color.RED] = 'red delicious'
    >>> apples[Color.GREEN] = 'granny smith'
    >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
    True
    
    9 cho giá trị

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

    >>> print(Color.RED)
    Color.RED
    
    29 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)
    Color.RED
    
    26 để 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(repr(Color.RED))

22 cũng che giấu giá trị (không quan trọng):

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

Sử dụng ________ 69¶

Sử dụng

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
9 sẽ giống như:

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

Sử dụng ________ 129¶

Sử dụng

>>> print(Color.RED)
Color.RED
29 sẽ giống như:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
0

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

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

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
1

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

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

>>> print(Color.RED)
Color.RED
26 sẽ giống như:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
2

Để tạo mục đích chung hơn

>>> print(repr(Color.RED))

29, hãy thêm
>>> print(repr(Color.RED))

30 vào chữ ký:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
3

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

>>> print(repr(Color.RED))

29, bạn có thể viết
>>> print(repr(Color.RED))

32 của riêng mình để xử lý bất kỳ đối số bổ sung nào:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
4

Ghi chú

Phương pháp

>>> print(Color.RED)
Color.RED
26, 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)
Color.RED
26 đượ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 bảng liệt kê được đặt hàng không dựa trên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5 và do đó duy trì các bất biến
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 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):

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
5

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:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
6

Ghi chú

Phương pháp

>>> print(Color.RED)
Color.RED
26, 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)
Color.RED
26 đượ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 bảng liệt kê được đặt hàng không dựa trên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
5 và do đó duy trì các bất biến
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 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):

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
7

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:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
8

Đâ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í >>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} True 8 có thể được sử dụng thay thế.

Hành tinh¶

Nếu >>> print(Color.RED) Color.RED 26 hoặc >>> print(Color.RED) Color.RED 27 đượ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 >>> print(Color.RED) Color.RED 25 đ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

Metaclass

>>> print(repr(Color.RED))

41 chịu trách nhiệm cung cấp
>>> print(repr(Color.RED))

42,
>>> print(repr(Color.RED))

43,
>>> print(repr(Color.RED))

44 và các phương pháp khác cho phép người ta làm những việc có lớp
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 thất bại trên một lớp điển hình, chẳng hạn như danh sách (màu) hoặc some_enum_var có màu.
>>> print(repr(Color.RED))

41 chịu trách nhiệm đảm bảo rằng nhiều phương pháp khác trong lớp
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 cuối cùng là chính xác (chẳng hạn như
>>> print(Color.RED)
Color.RED
26,
>>> print(repr(Color.RED))

49,
>>> print(Color.RED)
Color.RED
23 và
>>> print(Color.RED)
Color.RED
97).

Các thành viên enum (còn gọi là các trường hợp) ¶

Điều thú vị nhất về các thành viên Enum là họ là những người độc thân.
>>> print(repr(Color.RED))

41 tạo ra tất cả trong khi nó đang tạo ra lớp
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4, và sau đó đặt một
>>> print(Color.RED)
Color.RED
26 tùy chỉnh để đảm bảo rằng không có lớp mới nào được khởi tạo bằng cách chỉ trả lại các trường hợp thành viên hiện có.

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

  • Được hỗ trợ

    >>> print(repr(Color.RED))
    
    
    55 Tên

  • >>> print(Color.RED)
    Color.RED
    
    12 là một bản đồ chỉ được đặt hàng của ________ 257: ________ 258 các mục. Nó chỉ có sẵn trên lớp.

  • >>> print(Color.RED)
    Color.RED
    
    26, 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(repr(Color.RED))
    
    
    60 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.

  • Được hỗ trợ

    >>> print(repr(Color.RED))
    
    
    61 Tên

  • >>> print(repr(Color.RED))
    
    
    62 - Tên của thành viên

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

>>> print(repr(Color.RED))

65,
>>> print(repr(Color.RED))

69,
>>> print(repr(Color.RED))

70
>>> print(repr(Color.RED))

65,
>>> print(repr(Color.RED))

69,
>>> print(repr(Color.RED))

70

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

>>> print(Color.RED)
Color.RED
25
>>> print(Color.RED)
Color.RED
25

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

>>> print(repr(Color.RED))

69 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:

>>> class Shake(Enum):
...     VANILLA = 7
...     CHOCOLATE = 4
...     COOKIES = 9
...     MINT = 3
...
>>> for shake in Shake:
...     print(shake)
...
Shake.VANILLA
Shake.CHOCOLATE
Shake.COOKIES
Shake.MINT
9

Ghi chú

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

>>> print(repr(Color.RED))

69 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(repr(Color.RED))

78. 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(repr(Color.RED))

78.

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 Kiểu thành viên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 Thành viên là trường hợp của lớp
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 của họ và thường được truy cập là
>>> print(repr(Color.RED))

82. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(repr(Color.RED))

83, 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
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 mà bạn đang tìm ):

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
0

Ghi chú

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

>>> print(repr(Color.RED))

69 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(repr(Color.RED))

78.

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 Kiểu thành viên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
1

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 Thành viên là trường hợp của lớp
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 của họ và thường được truy cập là
>>> print(repr(Color.RED))

82. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> print(repr(Color.RED))

83, 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
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 mà bạn đang tìm ):

Hành vi này không được chấp nhận và sẽ bị xóa trong 3.11.

Thay đổi trong phiên bản 3.5.

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
2

Giá trị boolean của
>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 lớp và thành viên

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
4 Các thành viên được trộn với các loại không phải là không phải (như
>>> Color(1)

>>> Color(3)

4,
>>> member = Color.RED
>>> member.name
'RED'
>>> member.value
1
3, v.v.) được đánh giá theo các quy tắc loại hỗn hợp; Mặt khác, tất cả các thành viên đánh giá là
>>> print(Color.RED)
Color.RED
41. Để làm cho đánh giá boolean của riêng bạn phụ thuộc vào giá trị thành viên, cộng thêm giá trị sau vào lớp của bạn:

>>> apples = {}
>>> apples[Color.RED] = 'red delicious'
>>> apples[Color.GREEN] = 'granny smith'
>>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'}
True
3

Ghi chú

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

>>> print(repr(Color.RED))

69 là cần thiết vì thứ tự định nghĩa bị mất trước khi có thể ghi lại.