Hướng dẫn should enums be uppercase python? - enums có phải là python viết hoa không?

Tôi nghĩ rằng họ không phải là Upper_case bởi vì, nó trông thật kỳ lạ khi nó là. Vì bạn chỉ có thể truy cập các bảng liệt kê thông qua lớp (ví dụ:

>>> print(Color.RED.name)
RED
6), nên có vẻ kỳ lạ nếu các thành viên được viết hoa. Trong C, các thành viên của bảng liệt kê đi vào không gian tên mô -đun, vì vậy nó không có vẻ kỳ lạ (với tôi) khi các thành viên được viết hoa, trong việc sử dụng:

Show
typedef enum {OFF, ON} lightswitch;
lightswitch bathroomLight = ON;

Nhưng trong Python, bạn truy cập chúng thông qua lớp liệt kê mà bạn tạo ra và có vẻ kỳ lạ khi đi từ tên lớp đến All_Caps.

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF

Điểm mấu chốt, tôi nghĩ đó chỉ là thẩm mỹ. Tuy nhiên, tôi đã sai trước đây và tôi nhận ra rằng đây chỉ là ý kiến ​​của tôi.

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

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:

>>> print(Color.RED.name)
RED
7,
>>> print(Color.RED.name)
RED
8,
>>> print(Color.RED.name)
RED
9 và
>>> 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. Nó cũng xác định một người trang trí,
>>> 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 và một người trợ giú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
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

>>> 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.

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

>>> 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 của họ.
>>> 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 Thành viên cũng là các lớp con của
>>> 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.

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
9 của chúng.

________ 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.

Lớp ________ 73 ________ 89¶

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:

>>> print(Color.RED.name)
RED
9,
>>> 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,
>>> 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
>>> print(Color.RED.name)
RED
9,
>>> 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,
>>> 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ột Enum¶

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

>>> Color(1)

>>> Color(3)

3, 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
>>> print(Color.RED.name)
RED
7 như sau:

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

Ghi chú

Giá trị thành viên enum

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

>>> 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,
>>> Color(1)

>>> Color(3)

6, v.v. Phải cẩn thận nếu bạn trộn
>>> 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 với các giá trị khác.

Ghi chú

Danh pháp

  • Lớp

    >>> Color(1)
    
    >>> Color(3)
    
    
    9 là một liệt kê (hoặc enum)

  • Các thuộc tính

    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    00,
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    01, 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

    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    00 là
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    03, giá trị của
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    04 là
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    05, v.v.)

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

Trong khi

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
06 của họ có thêm thông tin:

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

Loại thành viên liệt kê là bảng liệt kê mà nó thuộc về:

>>> type(Color.RED)

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

Các thành viên của Enum cũng có một tài sản chỉ chứa tên mặt hàng của họ:

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

Tái liệt trình hỗ trợ lặp lại, theo thứ tự định nghĩa:

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

Các thành viên liệt kê có thể băm, vì vậy chúng có thể được sử dụng trong từ điển và bộ:

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

Truy cập chương trình vào các thành viên bảng liệt kê và các thuộc tính của họ Jo

Đôi khi, nó rất hữu ích để truy cập các thành viên trong các lập trình theo chương trình (nghĩa là các tình huống trong đó

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
00 won đã làm vì màu chính xác không được biết đến trong thời gian viết chương trình).
>>> print(Color.RED.name)
RED
7 cho phép truy cập như vậy:

>>> Color(1)

>>> Color(3)

Nếu bạn muốn truy cập các thành viên Enum theo tên, hãy sử dụng quyền truy cập mục:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
0

Nếu bạn có thành viên Enum và cần

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
09 hoặc
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
10:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
1

Sao chép các thành viên và giá trị enum

Có hai thành viên enum có cùng tên là không hợp lệ:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
2

Tuy nhiên, hai thành viên ENUM được phép có cùng giá trị. Cho hai thành viên A và B có cùng giá trị (và đầu tiên được xác định), B là bí danh đối với A. Tra cứu giá trị của giá trị của A và B sẽ trả về A. Tra cứu tên B của B cũng sẽ trả về A:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
3

Ghi chú

Cố gắng tạo một thành viên có cùng tên với thuộc tính đã được xác định (một thành viên khác, một phương thức, v.v.) hoặc cố gắng tạo một thuộc tính có cùng tên với thành viên không được phép.

Đảm bảo các giá trị liệt kê duy nhất

Theo mặc định, việc liệt kê cho phép nhiều tên là bí danh cho cùng một giá trị. Khi hành vi này không được mong muốn, bộ trang trí sau đây có thể được sử dụng để đảm bảo mỗi giá trị chỉ được sử dụng một lần trong bảng liệt kê:

________ 111 ​​________ 73 ________ 87¶

Một

>>> Color(1)

>>> Color(3)

3 Người trang trí đặc biệt cho các liệt kê. Nó tìm kiếm một bảng liệt kê từ
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
15 thu thập bất kỳ bí danh nào mà nó tìm thấy; Nếu có được tìm thấy
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
16 được nêu ra với các chi tiết:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
4

Sử dụng các giá trị tự động

Nếu giá trị chính xác là không quan trọng, bạn có thể sử dụng

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
5

Các giá trị được chọn bởi

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
18, có thể bị ghi đè:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
6

Ghi chú

Cố gắng tạo một thành viên có cùng tên với thuộc tính đã được xác định (một thành viên khác, một phương thức, v.v.) hoặc cố gắng tạo một thuộc tính có cùng tên với thành viên không được phép.

Ghi chú

Đảm bảo các giá trị liệt kê duy nhất

Theo mặc định, việc liệt kê cho phép nhiều tên là bí danh cho cùng một giá trị. Khi hành vi này không được mong muốn, bộ trang trí sau đây có thể được sử dụng để đảm bảo mỗi giá trị chỉ được sử dụng một lần trong bảng liệt kê:

________ 111 ​​________ 73 ________ 87¶

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
7

Một

>>> Color(1)

>>> Color(3)

3 Người trang trí đặc biệt cho các liệt kê. Nó tìm kiếm một bảng liệt kê từ
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
15 thu thập bất kỳ bí danh nào mà nó tìm thấy; Nếu có được tìm thấy
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
16 được nêu ra với các chi tiết:

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
8

Sử dụng các giá trị tự động

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
9

Nếu giá trị chính xác là không quan trọng, bạn có thể sử dụng >>> 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:

Các giá trị được chọn bởi

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
18, có thể bị ghi đè:

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
18 mặc định là cung cấp trình tự
>>> 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 tiếp theo với trình tự
>>> 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 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.

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

Phương pháp

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
18 phải được xác định trước bất kỳ thành viên nào.

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

Sự lặp lại

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

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
15 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:

Thuộc tính

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
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:

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

Then:

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

So sánh lor

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

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

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

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,

>>> print(Color.RED.name)
RED
8 được thiết kế rõ ràng để hoạt động khác nhau, xem bên dưới):

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

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

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

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 (

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
26,
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
27, 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
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
28.

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 và/hoặc
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
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ụ.

Ghi chú

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

Một lớp

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

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:

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

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

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ụ.)

Đố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ố

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
37 để chỉ định giá trị bắt đầu khác). Một lớp mới có nguồn gốc từ
>>> print(Color.RED.name)
RED
7 được trả về. Nói cách khác, nhiệm vụ trên cho
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
39 tương đương với:

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
40 là số bắt đầu chứ không phải
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
41 là
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
41 là
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
43 theo nghĩa boolean, nhưng tất cả các thành viên enum đều đánh giá thành
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
44.

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:

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

Cảnh báo

Nếu

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
45 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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
46 đượ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:

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

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

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

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

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

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ị):

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

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

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

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

>>> print(Color.RED.name)
RED
7 được cung cấp cũng là một lớp con của
>>> 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. Các thành viên của
>>> print(Color.RED.name)
RED
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:

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

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

>>> print(Color.RED.name)
RED
7 tiêu chuẩn:

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

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

0

Intflag¶

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

>>> print(Color.RED.name)
RED
7 được cung cấ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
0, cũng dựa trên
>>> 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. Sự khác biệt là
>>> 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 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
>>> 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. Tuy nhiên, như tên gọi,
>>> 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 Các thành viên cũng phân lớ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
7 và có thể được sử dụng bất cứ nơi nào sử dụng
>>> 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. Bất kỳ hoạt động nào trên thành viên
>>> 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 bên cạnh các hoạt động bit khôn ngoan sẽ mất tư cách thành viên
>>> 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.

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

Mẫu

>>> 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 Lớp:

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

1

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

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

2

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

>>> 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 và
>>> print(Color.RED.name)
RED
7 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
43:

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

3

Bởi vì

>>> 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 Các thành viên cũng là các lớp con của
>>> 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 nên họ có thể được kết hợp với họ:

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

4

Lá cờ¶

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

>>> print(Color.RED.name)
RED
9. 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,
>>> print(Color.RED.name)
RED
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ư
>>> 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, 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ê
>>> print(Color.RED.name)
RED
9 nào khác, cũng không phải
>>> 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. 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
>>> 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 làm giá trị và để
>>> print(Color.RED.name)
RED
9 chọn một giá trị thích hợp.

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

Mẫu

>>> 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 Lớp:

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

5

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

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

6

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

>>> 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 và
>>> print(Color.RED.name)
RED
7 là nếu không có cờ được đặt (giá trị là 0), đánh giá boolean của nó là
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
43:

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

7

Bởi vì

>>> 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 Các thành viên cũng là các lớp con của
>>> 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 nên họ có thể được kết hợp với họ:

Lá cờ¶

Khác¶

Mặc dù

>>> print(Color.RED.name)
RED
8 là một phần của mô -đun
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
88, nhưng sẽ rất đơn giản để thực hiện độc lập:

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

8

Đ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ụ,

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
89 trộn trong
>>> Color(1)

>>> Color(3)

6 thay vì
>>> 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.

Một số quy tắc:

  1. Khi phân lớp

    >>> print(Color.RED.name)
    RED
    
    7, các loại hỗn hợp phải xuất hiện trước khi
    >>> print(Color.RED.name)
    RED
    
    7 trong chuỗi các cơ sở, như trong ví dụ
    >>> print(Color.RED.name)
    RED
    
    8 ở trên.

  2. Mặc dù

    >>> print(Color.RED.name)
    RED
    
    7 có thể có các thành viên thuộc bất kỳ loại nào, một khi bạn trộn theo loại bổ sung, tất cả các thành viên phải có giá trị của loại đó, ví dụ:
    >>> 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ên. Hạn chế này không áp dụng cho hỗn hợp mà chỉ thêm các phương thức và don chỉ định một loại khác.

  3. Khi một loại dữ liệu khác được trộn lẫn, thuộc tính

    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    10 không giống với chính thành viên Enum, mặc dù nó tương đương và sẽ so sánh bằng nhau.

  4. Định dạng theo kiểu %: %s và %r gọi lớp

    >>> print(Color.RED.name)
    RED
    
    7 lần lượt là
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    26 và
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    00; Các mã khác (chẳng hạn như %I hoặc %H cho intenum) coi thành viên enum là loại hỗn hợp của nó.

  5. Các chuỗi chữ được định dạng,

    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    01 và
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    02 sẽ sử dụng loại hỗn hợp loại ____ ____203 trừ khi
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    26 hoặc
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    03 được ghi đè trong lớp con, trong trường hợp đó, các phương thức được ghi đè hoặc các phương thức
    >>> print(Color.RED.name)
    RED
    
    7 sẽ được sử dụng. Sử dụng mã định dạng! S và!,
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    01, and
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    02 will use the mixed-in type’s
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    03 unless
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    26 or
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    03 is overridden in the subclass, in which case the overridden methods or
    >>> print(Color.RED.name)
    RED
    
    7 methods will be used. Use the !s and !r format codes to force usage of the
    >>> print(Color.RED.name)
    RED
    
    7 class’s
    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    26 and
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    00 methods.

Khi nào nên sử dụng class Lightswitch(Enum): OFF = 0 ON = 1 # isn't that weird? my_light = Lightswitch.OFF 29 so với ________ 130¶

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 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
>>> print(Color.RED.name)
RED
7. Bất kỳ sửa đổi nào khác có thể đi trong
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 hoặc
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
30, với
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
30 đượ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(repr(Color.RED))

9

Ví dụ thú vị

Trong khi

>>> print(Color.RED.name)
RED
7,
>>> print(Color.RED.name)
RED
8,
>>> 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 và
>>> print(Color.RED.name)
RED
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

    >>> 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 cho giá trị

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

    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    32 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

    class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    29 để 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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
25 cũng che giấu giá trị (không quan trọng):

>>> type(Color.RED)

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

Sử dụng ________ 72¶

Sử dụng

>>> 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 sẽ giống như:

>>> type(Color.RED)

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

Sử dụng ________ 132¶

Sử dụng

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
32 sẽ giống như:

>>> type(Color.RED)

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

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

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

>>> type(Color.RED)

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

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 sẽ giống như:

>>> type(Color.RED)

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

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
32, hãy thêm
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
33 vào chữ ký:

>>> type(Color.RED)

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

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
32, bạn có thể viết
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
35 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
>>>
6

Ghi chú

Phương pháp

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29, 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ừ
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 đượ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

>>> print(Color.RED.name)
RED
8 và do đó duy trì các bất biến
>>> print(Color.RED.name)
RED
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
>>>
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:

>>> type(Color.RED)

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

Ghi chú

Phương pháp

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29, 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ừ
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 đượ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

>>> print(Color.RED.name)
RED
8 và do đó duy trì các bất biến
>>> print(Color.RED.name)
RED
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
>>>
9

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:

>>> print(Color.RED.name)
RED
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í >>> 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 có thể được sử dụng thay thế.

Hành tinh¶

Nếu class Lightswitch(Enum): OFF = 0 ON = 1 # isn't that weird? my_light = Lightswitch.OFF 29 hoặc class Lightswitch(Enum): OFF = 0 ON = 1 # isn't that weird? my_light = Lightswitch.OFF 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

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.

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
44 tạo ra tất cả trong khi nó đang tạo ra lớp
>>> print(Color.RED.name)
RED
7, và sau đó đặt một
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29 tùy chỉnh để đảm bảo rằng không có trường 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ợ
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
58 Tên

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
15 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.

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
29, 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
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
63 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ợ
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
64 tên

  • >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    65 - Tên của thành viên

  • >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    63 - giá trị của thành viên; có thể được đặt / sửa đổi trong
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    67

  • >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    68 - một hàm tra cứu được sử dụng khi không tìm thấy giá trị; có thể bị ghi đè

  • class Lightswitch(Enum):
        OFF = 0
        ON = 1
    
    # isn't that weird?
    my_light = Lightswitch.OFF
    
    28 - một danh sách các tên, dưới dạng
    >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    70 hoặc
    >>> Color(1)
    
    >>> Color(3)
    
    
    6, sẽ không được chuyển thành các thành viên và sẽ bị xóa khỏi lớp cuối cùng

  • >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    72 - Đượ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)

  • >>> from enum import Enum
    >>> class Color(Enum):
    ...     RED = 1
    ...     GREEN = 2
    ...     BLUE = 3
    ...
    
    73 - Được API chức năng sử dụng và bằng
    >>> 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 để 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:

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

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

class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
28
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
28

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
72 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:

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

Ghi chú

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
72 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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
81. 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
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
81.

>>> print(Color.RED.name)
RED
7 Kiểu thành viên

>>> print(Color.RED.name)
RED
7 Thành viên là trường hợp của lớp
>>> print(Color.RED.name)
RED
7 của họ và thường được truy cập là
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
85. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
86, 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
>>> print(Color.RED.name)
RED
7 mà bạn đang tìm ):

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

Ghi chú

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
72 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
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
81.

>>> print(Color.RED.name)
RED
7 Kiểu thành viên

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

>>> print(Color.RED.name)
RED
7 Thành viên là trường hợp của lớp
>>> print(Color.RED.name)
RED
7 của họ và thường được truy cập là
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
85. Trong một số trường hợp nhất định, chúng cũng có thể được truy cập là
>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
86, 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
>>> print(Color.RED.name)
RED
7 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.

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

Giá trị boolean của các lớp
>>> print(Color.RED.name)
RED
7 và thành viên

>>> print(Color.RED.name)
RED
7 Các thành viên được trộn lẫn với các loại không phải là không phải là
>>> 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,
>>> Color(1)

>>> Color(3)

6, 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à
class Lightswitch(Enum):
    OFF = 0
    ON = 1

# isn't that weird?
my_light = Lightswitch.OFF
44. Để 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:

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

Ghi chú

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

>>> from enum import Enum
>>> class Color(Enum):
...     RED = 1
...     GREEN = 2
...     BLUE = 3
...
72 là cần thiết vì thứ tự định nghĩa bị mất trước khi có thể ghi lại.

Làm thế nào để bạn tuyên bố một enum trong Python?

Các liệt kê trong Python được triển khai bằng cách sử dụng mô -đun có tên là En Enum.Liệt kê được tạo bằng cách sử dụng các lớp ...
Enums có thể được hiển thị dưới dạng chuỗi hoặc repr ..
Enums có thể được kiểm tra các loại của họ bằng cách sử dụng loại () ..
Từ khóa tên của người Viking được sử dụng để hiển thị tên của thành viên enum ..

Các enum có được cho là được viết hoa không?

Bởi vì chúng là hằng số, tên của các trường của một loại enum nằm trong các chữ cái viết hoa.Bạn nên sử dụng các loại Enum bất cứ khi nào bạn cần đại diện cho một tập hợp các hằng số cố định.the names of an enum type's fields are in uppercase letters. You should use enum types any time you need to represent a fixed set of constants.

Có nên enums là trường hợp lạc đà?

Enums là các loại, vì vậy chúng nên được đặt tên bằng cách sử dụng các lớp Uppercamelcase.Các giá trị enum là hằng số, vì vậy chúng nên được đặt tên bằng cách sử dụng LowerCamelCase như hằng số hoặc all_caps nếu mã của bạn sử dụng kiểu đặt tên kế thừa đó.they should be named using UpperCamelCase like classes. The enum values are constants, so they should be named using lowerCamelCase like constants, or ALL_CAPS if your code uses that legacy naming style.

Enums có thể là chữ thường không?

Đặt tên quy ước Sử dụng các chữ cái viết hoa cho enum của bạn - chúng là các hằng số toàn cầu có các giá trị có thể sử dụng.Chúng không chỉ là các loại, thường sử dụng như foo hoặc tfoo.Các phím trên một enum có xu hướng là t tiêu chuẩn.Use uppercase letters for your enums - they are global constants which have usable values. They are more than just types, which use usually like Foo or TFoo . The keys on an enum tend to be titlecase.