Mới trong phiên bản 3.4. Show
Mã nguồn: lib/enum.py Lib/enum.py Một bảng liệt kê:
Các liệt kê được tạo bằng cách sử dụng cú pháp >>> Color.GREEN <Color.GREEN: 2>4 hoặc bằng cách sử dụng cú pháp gọi chức năng: >>> from enum import Enum >>> # class syntax >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 >>> # functional syntax >>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE']) Mặc dù chúng ta có thể sử dụng cú pháp >>> Color.GREEN <Color.GREEN: 2>4 để tạo enum, Enums không phải là các lớp Python bình thường. Xem enums khác nhau như thế nào? để biết thêm chi tiết.How are Enums different? for more details. Ghi chú Danh pháp
Nội dung mô -đun>>> Color['BLUE'] <Color.BLUE: 3>3>>> Color['BLUE'] <Color.BLUE: 3>4 cho enum và các lớp con của nó.>>> Color['BLUE'] <Color.BLUE: 3>5 Mới trong phiên bản 3.6: >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]0, >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2, >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 Mới trong phiên bản 3.11: >>> Color['BLUE'] <Color.BLUE: 3>8, >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]7, >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]6, >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]2, >>> from datetime import date >>> class Weekday(Enum): ... MONDAY = 1 ... TUESDAY = 2 ... WEDNESDAY = 3 ... THURSDAY = 4 ... FRIDAY = 5 ... SATURDAY = 6 ... SUNDAY = 7 ... @classmethod ... def today(cls): ... print('today is %s' % cls(date.today().isoweekday()).name) >>> dir(Weekday.SATURDAY) ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']8, >>> from datetime import date >>> class Weekday(Enum): ... MONDAY = 1 ... TUESDAY = 2 ... WEDNESDAY = 3 ... THURSDAY = 4 ... FRIDAY = 5 ... SATURDAY = 6 ... SUNDAY = 7 ... @classmethod ... def today(cls): ... print('today is %s' % cls(date.today().isoweekday()).name) >>> dir(Weekday.SATURDAY) ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']9, >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 60, >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 61, >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 62 Loại dữ liệu¶classenum.EnumType¶ enum.EnumType¶EnumType là metaclass cho các liệt kê. Có thể phân lớp enumtype - xem phân lớp enumtype để biết chi tiết.metaclass for enum enumerations. It is possible to subclass EnumType – see Subclassing EnumType for details. EnumType chịu trách nhiệm thiết lập đúng các phương thức >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 63, >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64, >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 và >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 66 trên Enum cuối cùng, cũng như tạo các thành viên Enum, xử lý đúng các bản sao, cung cấp lặp lại lớp Enum, v.v. __Contains __ (CLS, thành viên) ¶(cls, member)¶ Trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 67 Nếu thành viên thuộc về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 68: >>> some_var = Color.RED >>> some_var in Color True Ghi chú Danh pháp Lớp>>> Color.GREEN <Color.GREEN: 2>6 là một liệt kê (hoặc enum)(cls)¶ Các thuộc tính >>> Color.GREEN <Color.GREEN: 2>7, >>> Color.GREEN <Color.GREEN: 2>8, v.v., là các thành viên (hoặc thành viên) liệt kê và là hằng số chức năng. >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']Các thành viên ENUM có tên và giá trị (tên của >>> Color.GREEN <Color.GREEN: 2>7 là >>> Color['BLUE'] <Color.BLUE: 3>0, giá trị của >>> Color['BLUE'] <Color.BLUE: 3>1 là >>> Color['BLUE'] <Color.BLUE: 3>2, v.v.)(cls, name)¶ Nội dung mô -đun >>> Color.GREEN <Color.GREEN: 2> >>> Color['BLUE'] <Color.BLUE: 3>4 cho enum và các lớp con của nó.(cls, name)¶ Lớp cơ sở để tạo các hằng số được liệt kê. >>> Color['BLUE'] <Color.BLUE: 3>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['BLUE'] <Color.BLUE: 3>7. (Ghi chú)(cls)¶ 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['BLUE'] <Color.BLUE: 3>9. (Ghi chú) >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]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 >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]0.(cls)¶ 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 >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 của họ. >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 Thành viên cũng là các lớp con của >>> Color['BLUE'] <Color.BLUE: 3>7. (Ghi chú) Một bảng liệt kê với các giá trị >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]8, >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]9 và >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]0, để sử dụng với >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]1 để đảm bảo các ràng buộc khác nhau được đáp ứng bởi một bảng liệt kê nhất định.(cls)¶ Một bảng liệt kê với các giá trị >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]3, >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]4, >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]5 và >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]6 cho phép kiểm soát chi tiết hơn về cách các giá trị không hợp lệ được xử lý trong một bảng liệt kê. >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 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. >>> Color['BLUE'] <Color.BLUE: 3>8 mặc định cho phiên bản có tên dưới của tên thành viên, trong khi các enum khác mặc định là 1 và tăng từ đó. enum.Enum¶ Cho phép các thành viên >>> Color['BLUE'] <Color.BLUE: 3>5 có các thuộc tính mà không mâu thuẫn với tên thành viên. 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.¶ Bộ trang trí lớp Enum kiểm tra các ràng buộc có thể chọn người dùng trên một bảng liệt kê. >>> Color.BLUE.name 'BLUE'Biến >>> Color.BLUE.name 'BLUE'4 thành một thành viên. Có thể được sử dụng như một người trang trí.¶ Không biến >>> Color.BLUE.name 'BLUE'4 thành một thành viên. Có thể được sử dụng như một người trang trí. Ghi chú Danh pháp Lớp >>> Color.GREEN <Color.GREEN: 2>6 là một liệt kê (hoặc enum) _phớt lờ_¶¶ >>> some_var = Color.RED >>> some_var in Color True09 chỉ được sử dụng trong quá trình tạo và được loại bỏ khỏi bảng liệt kê sau khi tạo ra hoàn tất. >>> some_var = Color.RED >>> some_var in Color True09 là danh sách các tên sẽ không trở thành thành viên và tên của họ cũng sẽ bị xóa khỏi bảng liệt kê đã hoàn thành. Xem thời gian cho một ví dụ.TimePeriod for an example. __call __ (cls, value, name = none, \*, module = none, Qualname = none, type = none, start = 1, boundary = none)(cls, value, names=None, \*, module=None, qualname=None, type=None, start=1, boundary=None)¶ Phương pháp này được gọi theo hai cách khác nhau:
Cách xử lý các giá trị ngoài phạm vi từ các hoạt động bit (chỉ >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]0) >>> from datetime import date >>> class Weekday(Enum): ... MONDAY = 1 ... TUESDAY = 2 ... WEDNESDAY = 3 ... THURSDAY = 4 ... FRIDAY = 5 ... SATURDAY = 6 ... SUNDAY = 7 ... @classmethod ... def today(cls): ... print('today is %s' % cls(date.today().isoweekday()).name) >>> dir(Weekday.SATURDAY) ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']__dir __ (bản thân) ¶(name, start, count, last_values)¶
Số lượng thành viên hiện được xác định, không bao gồm số này. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 6Một danh sách các giá trị trước đó.(cls, \**kwds)¶ Một staticmethod được sử dụng để xác định giá trị tiếp theo được trả về bởi >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7: __init_subclass __ (cls, \ ** kwds) ¶(cls, value)¶ Một lớp được sử dụng để cấu hình thêm các lớp con tiếp theo. Theo mặc định, không làm gì cả. >>> some_var = Color.RED >>> some_var in Color True0 _missing_ (cls, giá trị) ¶(self)¶ Một lớp học để tìm kiếm các giá trị không tìm thấy trong CLS. Theo mặc định, nó không làm gì cả, nhưng có thể được ghi đè để thực hiện hành vi tìm kiếm tùy chỉnh: >>> some_var = Color.RED >>> some_var in Color True1 __repr __ (bản thân) ¶(self)¶ Trả về chuỗi được sử dụng cho các cuộc gọi repr (). Theo mặc định, trả về tên enum, tên thành viên và giá trị, nhưng có thể bị ghi đè: >>> some_var = Color.RED >>> some_var in Color True2 __str __ (bản thân) ¶(self)¶ Trả về chuỗi được sử dụng cho các cuộc gọi str (). Theo mặc định, trả về tên enum và tên thành viên, nhưng có thể bị ghi đè: >>> some_var = Color.RED >>> some_var in Color True3 __format __ (tự) ¶ Trả về chuỗi được sử dụng cho các cuộc gọi format () và f-string. Theo mặc định, trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 trả về, nhưng có thể bị ghi đè: Ghi chú enum.IntEnum¶ Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> Color['BLUE'] <Color.BLUE: 3>5 dẫn đến các số nguyên có giá trị ngày càng tăng, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. >>> some_var = Color.RED >>> some_var in Color True4 classenum.intenum¶ Intenum giống như enum, nhưng các thành viên của nó cũng là số nguyên và có thể được sử dụng ở bất cứ đâu mà một số nguyên có thể được sử dụng. Nếu bất kỳ hoạt động số nguyên nào được thực hiện với thành viên Intenum, giá trị kết quả sẽ mất trạng thái liệt kê. Ghi chú >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 is now >>> some_var = Color.RED >>> some_var in Color True24 to better support the replacement of existing constants use-case. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 was already >>> some_var = Color.RED >>> some_var in Color True26 for that same reason. Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> Color['BLUE'] <Color.BLUE: 3>6 dẫn đến các số nguyên có giá trị ngày càng tăng, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19.enum.StrEnum¶ Đã thay đổi trong phiên bản 3.11: >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 hiện là >>> some_var = Color.RED >>> some_var in Color True24 để hỗ trợ tốt hơn cho việc thay thế trường hợp sử dụng hằng số hiện tại. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 đã là >>> some_var = Color.RED >>> some_var in Color True26 vì lý do tương tự. __format __ (tự) ¶ Trả về chuỗi được sử dụng cho các cuộc gọi format () và f-string. Theo mặc định, trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 trả về, nhưng có thể bị ghi đè: __format __ (tự) ¶ Trả về chuỗi được sử dụng cho các cuộc gọi format () và f-string. Theo mặc định, trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 trả về, nhưng có thể bị ghi đè: __format __ (tự) ¶ Trả về chuỗi được sử dụng cho các cuộc gọi format () và f-string. Theo mặc định, trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 trả về, nhưng có thể bị ghi đè: Ghi chú Sử dụng>>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> Color['BLUE'] <Color.BLUE: 3>5 dẫn đến các số nguyên có giá trị ngày càng tăng, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19.enum.Flag¶ classenum.intenum¶ Intenum giống như enum, nhưng các thành viên của nó cũng là số nguyên và có thể được sử dụng ở bất cứ đâu mà một số nguyên có thể được sử dụng. Nếu bất kỳ hoạt động số nguyên nào được thực hiện với thành viên Intenum, giá trị kết quả sẽ mất trạng thái liệt kê.(self, value)¶Ghi chú >>> some_var = Color.RED >>> some_var in Color True5 __iter__(self): Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> Color['BLUE'] <Color.BLUE: 3>6 dẫn đến các số nguyên có giá trị ngày càng tăng, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. >>> some_var = Color.RED >>> some_var in Color True6 __len__(self): Đã thay đổi trong phiên bản 3.11: >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 hiện là >>> some_var = Color.RED >>> some_var in Color True24 để hỗ trợ tốt hơn cho việc thay thế trường hợp sử dụng hằng số hiện tại. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 đã là >>> some_var = Color.RED >>> some_var in Color True26 vì lý do tương tự. >>> some_var = Color.RED >>> some_var in Color True7 __bool__(self): classenum.strenum¶ >>> some_var = Color.RED >>> some_var in Color True8 Strenum giống như enum, nhưng các thành viên của nó cũng là chuỗi và có thể được sử dụng ở hầu hết các nơi giống như một chuỗi có thể được sử dụng. Kết quả của bất kỳ hoạt động chuỗi nào được thực hiện trên hoặc với thành viên Strenum không phải là một phần của bảng liệt kê.(self, other)¶ Có những vị trí trong stdlib kiểm tra chính xác >>> Color['BLUE'] <Color.BLUE: 3>9 thay vì phân lớp >>> Color['BLUE'] <Color.BLUE: 3>9 (tức là >>> some_var = Color.RED >>> some_var in Color True29 thay vì >>> some_var = Color.RED >>> some_var in Color True30) và ở những vị trí đó, bạn sẽ cần sử dụng >>> some_var = Color.RED >>> some_var in Color True31. >>> some_var = Color.RED >>> some_var in Color True9 Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> Color['BLUE'] <Color.BLUE: 3>8 kết quả trong tên thành viên có hàm lượng thấp hơn làm giá trị.(self, other)¶ >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 là >>> some_var = Color.RED >>> some_var in Color True35 để hỗ trợ tốt hơn cho việc thay thế trường hợp sử dụng hằng số hiện có. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 cũng như vậy >>> some_var = Color.RED >>> some_var in Color True37 vì lý do tương tự. >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']0 Mới trong phiên bản 3.11.(self, other)¶ classenum.flag¶ >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']1 __invert__(self): Các thành viên cờ hỗ trợ các toán tử bitwise >>> some_var = Color.RED >>> some_var in Color True38 (và), >>> some_var = Color.RED >>> some_var in Color True39 (hoặc), >>> some_var = Color.RED >>> some_var in Color True40 (XOR) và >>> some_var = Color.RED >>> some_var in Color True41 (đảo ngược); Kết quả của các nhà khai thác đó là thành viên của việc liệt kê. >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']2 __contains __ (bản thân, giá trị) ¶()¶ Trả về đúng nếu giá trị tự mình: __format __ (tự) ¶ Trả về chuỗi được sử dụng cho các cuộc gọi format () và f-string. Theo mặc định, trả về >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 trả về, nhưng có thể bị ghi đè: Thay đổi trong phiên bản 3.11: repr () của các cờ có giá trị bằng không đã thay đổi. Nó bây giờ là::The repr() of zero-valued flags has changed. It is now:: classenum.intflag¶enum.IntFlag¶Intflag giống như cờ, nhưng các thành viên của nó cũng là số nguyên và có thể được sử dụng ở bất cứ đâu mà một số nguyên có thể được sử dụng. >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']3 Nếu bất kỳ hoạt động số nguyên nào được thực hiện với thành viên INTFLAG, kết quả không phải là Intflag: Nếu một hoạt động cờ được thực hiện với thành viên Intflag và:
Bản repr () của các cờ có giá trị không tên đã thay đổi. Nó bây giờ là: Ghi chú Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 dẫn đến các số nguyên là sức mạnh của hai, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. Đã thay đổi trong phiên bản 3.11: >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 is now >>> some_var = Color.RED >>> some_var in Color True24 to better support the replacement of existing constants use-case. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 was already >>> some_var = Color.RED >>> some_var in Color True26 for that same reason. classenum.reprenum¶enum.ReprEnum¶ >>> some_var = Color.RED >>> some_var in Color True54 sử dụng >>> Color.BLUE.name 'BLUE'9 của >>> Color['BLUE'] <Color.BLUE: 3>5, nhưng >>> Color.BLUE.name 'BLUE'8 của loại dữ liệu hỗn hợp:
Kế thừa từ >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]6 để giữ >>> some_var = Color.RED >>> some_var in Color True64 của loại dữ liệu hỗn hợp thay vì sử dụng ________ 45-Default >>> Color.BLUE.name 'BLUE'8. Mới trong phiên bản 3.11. classenum.enumcheck¶ enum.EnumCheck¶Enumcheck chứa các tùy chọn được sử dụng bởi >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]1 Trình trang trí để đảm bảo các ràng buộc khác nhau; Các ràng buộc không thành công dẫn đến >>> some_var = Color.RED >>> some_var in Color True68. ĐỘC NHẤT¶¶ Đảm bảo rằng mỗi giá trị chỉ có một tên: >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']4 TIẾP DIỄN¶¶ Đảm bảo rằng không có giá trị thiếu giữa thành viên có giá trị thấp nhất và thành viên có giá trị cao nhất: >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']5 Tên_flags¶¶ Đảm bảo rằng bất kỳ nhóm/mặt nạ cờ nào chỉ chứa cờ có tên - hữu ích khi các giá trị được chỉ định thay vì được tạo bởi >>> some_var = Color.RED >>> some_var in Color True69 >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']6 Ghi chú Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 dẫn đến các số nguyên là sức mạnh của hai, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. Mới trong phiên bản 3.11. classenum.enumcheck¶enum.FlagBoundary¶Enumcheck chứa các tùy chọn được sử dụng bởi >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]1 Trình trang trí để đảm bảo các ràng buộc khác nhau; Các ràng buộc không thành công dẫn đến >>> some_var = Color.RED >>> some_var in Color True68. ĐỘC NHẤT¶¶ Đảm bảo rằng mỗi giá trị chỉ có một tên: >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']7 TIẾP DIỄN¶¶ Đảm bảo rằng không có giá trị thiếu giữa thành viên có giá trị thấp nhất và thành viên có giá trị cao nhất: >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']8 Tên_flags¶¶ Đảm bảo rằng bất kỳ nhóm/mặt nạ cờ nào chỉ chứa cờ có tên - hữu ích khi các giá trị được chỉ định thay vì được tạo bởi >>> some_var = Color.RED >>> some_var in Color True69 >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']9 Liên tục và được đặt tên_flags được thiết kế để hoạt động với các thành viên có giá trị số nguyên.¶ classenum.flagboundary¶ >>> Color.GREEN <Color.GREEN: 2>0 Mới trong phiên bản 3.11. classenum.enumcheck¶Enumcheck chứa các tùy chọn được sử dụng bởi >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]1 Trình trang trí để đảm bảo các ràng buộc khác nhau; Các ràng buộc không thành công dẫn đến >>> some_var = Color.RED >>> some_var in Color True68. ĐỘC NHẤT¶ Đảm bảo rằng mỗi giá trị chỉ có một tên:
classenum.reprenum¶ >>> some_var = Color.RED >>> some_var in Color True84, >>> some_var = Color.RED >>> some_var in Color True88, >>> some_var = Color.RED >>> some_var in Color True89
>>> some_var = Color.RED >>> some_var in Color True09 >>> some_var = Color.RED >>> some_var in Color True 24 cho >>> Color['BLUE'] <Color.BLUE: 3> 6 và >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>] 2>>> some_var = Color.RED >>> some_var in Color True35 cho >>> Color['BLUE'] <Color.BLUE: 3>8 enum.auto¶ Kế thừa từ >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]6 để giữ >>> some_var = Color.RED >>> some_var in Color True64 của loại dữ liệu hỗn hợp thay vì sử dụng ________ 45-Default >>> Color.BLUE.name 'BLUE'8. Mới trong phiên bản 3.11. Ghi chú Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 dẫn đến các số nguyên là sức mạnh của hai, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. Đã thay đổi trong phiên bản 3.11: >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 64 hiện là >>> some_var = Color.RED >>> some_var in Color True24 để hỗ trợ tốt hơn cho việc thay thế trường hợp sử dụng hằng số hiện tại. >>> from enum import auto >>> class PowersOfThree(Enum): ... @staticmethod ... def _generate_next_value_(name, start, count, last_values): ... return (count + 1) * 3 ... FIRST = auto() ... SECOND = auto() >>> PowersOfThree.SECOND.value 65 đã là >>> some_var = Color.RED >>> some_var in Color True26 vì lý do tương tự.enum.property¶ classenum.reprenum¶ Ghi chú Sử dụng >>> list(reversed(Color)) [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]7 với >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2 dẫn đến các số nguyên là sức mạnh của hai, bắt đầu từ >>> some_var = Color.RED >>> some_var in Color True19. Mới trong phiên bản 3.11. @enum.unique¶enum.unique¶Một >>> Color.GREEN <Color.GREEN: 2>4 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ừ ____ ____175, thu thập bất kỳ bí danh nào mà nó tìm thấy; Nếu bất kỳ tìm thấy >>> some_var = Color.RED >>> some_var in Color True68 được nêu ra với các chi tiết: >>> Color.GREEN <Color.GREEN: 2>1 @enum.verify¶enum.verify¶ Một >>> Color.GREEN <Color.GREEN: 2>4 Người trang trí đặc biệt cho các liệt kê. Các thành viên từ >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]7 được sử dụng để chỉ định những ràng buộc nào nên được kiểm tra trên bảng liệt kê được trang trí. Mới trong phiên bản 3.11. @enum.Member¶enum.member¶Một người trang trí để sử dụng trong Enums: Mục tiêu của nó sẽ trở thành thành viên. Mới trong phiên bản 3.11. @enum.nonmember¶enum.nonmember¶Một người trang trí để sử dụng trong Enums: Mục tiêu của nó sẽ không trở thành thành viên. Mới trong phiên bản 3.11. @enum.global_enum¶enum.global_enum¶Một người trang trí để thay đổi >>> Color.BLUE.name 'BLUE'8 và >>> Color.BLUE.name 'BLUE'9 của một enum để hiển thị các thành viên của mình là thuộc về mô -đun thay vì lớp của nó. Chỉ nên được sử dụng khi các thành viên ENUM được xuất sang không gian tên toàn cầu mô -đun (xem >>> dir(Color) ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']08 để biết ví dụ). Mới trong phiên bản 3.11. enum.show_flag_values (giá trị) ¶show_flag_values(value)¶Trả về một danh sách tất cả các số nguyên power-of-Two có trong một giá trị cờ. Mới trong phiên bản 3.11. Notes¶>>> Color['BLUE'] <Color.BLUE: 3>6, >>> Color['BLUE'] <Color.BLUE: 3>8 và >>> list(Color) [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]2
Khi nào bạn nên sử dụng Enum Python?Nói chung, bạn có thể sử dụng enum bất cứ khi nào bạn có một biến có thể lấy một trong một tập hợp các giá trị có thể hạn chế. Python không có kiểu dữ liệu enum như là một phần của cú pháp. May mắn thay, Python 3.4 đã thêm mô -đun Enum vào thư viện tiêu chuẩn.whenever you have a variable that can take one of a limited set of possible values. Python doesn't have an enum data type as part of its syntax. Fortunately, Python 3.4 added the enum module to the standard library.
Làm thế nào để bạn sử dụng enums?Bạn phải luôn luôn sử dụng Enums khi một biến (đặc biệt là tham số phương thức) chỉ có thể lấy một trong một tập hợp nhỏ các giá trị có thể.Các ví dụ sẽ là những thứ như hằng số loại (trạng thái hợp đồng: "vĩnh viễn", "temp", "người học việc") hoặc cờ ("thực thi ngay bây giờ", "thực thi trì hoãn").when a variable (especially a method parameter) can only take one out of a small set of possible values. Examples would be things like type constants (contract status: "permanent", "temp", "apprentice"), or flags ("execute now", "defer execution").
Giá trị enum trong Python là gì?Một enum là một tập hợp các tên biểu tượng bị ràng buộc với các giá trị duy nhất.Chúng tương tự như các biến toàn cầu, nhưng chúng cung cấp một repr () hữu ích hơn, nhóm, an toàn loại và một vài tính năng khác.Như bạn có thể thấy, việc tạo một enum cũng đơn giản như viết một lớp kế thừa từ chính Enum.a set of symbolic names bound to unique values. They are similar to global variables, but they offer a more useful repr() , grouping, type-safety, and a few other features. As you can see, creating an Enum is as simple as writing a class that inherits from Enum itself.
Làm thế nào để bạn tuyên bố một enum?Một enum được xác định bằng cách sử dụng từ khóa Enum, trực tiếp bên trong không gian tên, lớp hoặc cấu trúc.Tất cả các tên không đổi có thể được khai báo bên trong các dấu ngoặc xoăn và được phân tách bằng dấu phẩy.Sau đây xác định một enum cho các ngày trong tuần.Ở trên, các ngày trong tuần, Enum tuyên bố các thành viên trong mỗi dòng được phân tách bằng dấu phẩy.using the enum keyword, directly inside a namespace, class, or structure. All the constant names can be declared inside the curly brackets and separated by a comma. The following defines an enum for the weekdays. Above, the WeekDays enum declares members in each line separated by a comma. |