Hướng dẫn python enum get value by key - python enum lấy giá trị theo khóa

Tôi có một enum được định nghĩa như thế này:

def enum(**enums):
    return type('Enum', (), enums)

Status = enum(
       STATUS_OK=0,
       STATUS_ERR_NULL_POINTER=1, 
       STATUS_ERR_INVALID_PARAMETER=2)

Tôi có một chức năng trả về trạng thái là

>>> cur_status = get_Status()
>>> print(cur_status)
1
1 enum. Làm thế nào tôi có thể lấy tên của giá trị enum, và không chỉ giá trị?

>>> cur_status = get_Status()
>>> print(cur_status)
1

Tôi muốn nhận

>>> cur_status = get_Status()
>>> print(cur_status)
1
2, thay vì
>>> cur_status = get_Status()
>>> print(cur_status)
1
3

Hướng dẫn python enum get value by key - python enum lấy giá trị theo khóa

Martineau

Huy hiệu vàng 116K2525 gold badges161 silver badges288 bronze badges

Hỏi ngày 26 tháng 4 năm 2015 lúc 16:32Apr 26, 2015 at 16:32

1

Bạn sẽ phải lặp qua các thuộc tính lớp để tìm tên phù hợp:

name = next(name for name, value in vars(Status).items() if value == 1)

Các vòng biểu thức của trình tạo trên các thuộc tính và giá trị của chúng (được lấy từ từ điển được tạo bởi hàm

>>> cur_status = get_Status()
>>> print(cur_status)
1
4) sau đó trả về giá trị đầu tiên phù hợp với giá trị
>>> cur_status = get_Status()
>>> print(cur_status)
1
3.

Việc liệt kê được mô hình hóa tốt hơn bởi thư viện

>>> cur_status = get_Status()
>>> print(cur_status)
1
6, có sẵn trong Python 3.4 hoặc làm backport cho các phiên bản trước:

from enum import Enum

class Status(Enum):
    STATUS_OK = 0
    STATUS_ERR_NULL_POINTER = 1 
    STATUS_ERR_INVALID_PARAMETER = 2

cho bạn quyền truy cập vào tên và giá trị:

name = Status(1).name  # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value  # gives 1

Đã trả lời ngày 26 tháng 4 năm 2015 lúc 16:36Apr 26, 2015 at 16:36

Martijn Pieters ♦ Martijn PietersMartijn Pieters

998K280 Huy hiệu vàng3925 Huy hiệu bạc3264 Huy hiệu đồng280 gold badges3925 silver badges3264 bronze badges

0

Cập nhật 2021: Những câu trả lời này đã hết hạn. Sử dụng lớp enum tiêu chuẩn của Python,

cur_status.name

sẽ trả lại tên. (Status_err_null_pulum)

Để tìm kiếm sự biết tên:

s = Status['STATUS_ERR_NULL_POINTER']

Đã trả lời ngày 17 tháng 3 năm 2021 lúc 13:19Mar 17, 2021 at 13:19

Gerardwgerardwgerardw

5.42143 Huy hiệu bạc38 Huy hiệu đồng43 silver badges38 bronze badges

3

Không chắc nó được giới thiệu phiên bản Python nào, nhưng thuộc tính ẩn

>>> cur_status = get_Status()
>>> print(cur_status)
1
7 cung cấp cho bạn những gì bạn muốn.

class Status(Enum):
    STATUS_OK=0
    STATUS_ERR_NULL_POINTER=1
    STATUS_ERR_INVALID_PARAMETER=2

str(Status._value2member_map_[1])

Out:

'Status.STATUS_ERR_NULL_POINTER'

Đã trả lời ngày 24 tháng 10 năm 2020 lúc 0:16Oct 24, 2020 at 0:16

Hướng dẫn python enum get value by key - python enum lấy giá trị theo khóa

DeusxmachinadeusxmachinaDeusXMachina

1.1721 Huy hiệu vàng15 Huy hiệu bạc26 Huy hiệu đồng1 gold badge15 silver badges26 bronze badges

3

Bạn không cần phải lặp qua lớp enum nhưng chỉ cần truy cập _member_map_.

>>> Status._member_map_['STATUS_OK']
<Status.STATUS_OK: 0>

Đã trả lời ngày 8 tháng 5 năm 2020 lúc 7:52May 8, 2020 at 7:52

Hướng dẫn python enum get value by key - python enum lấy giá trị theo khóa

TechneerTechneertechneer

1371 Huy hiệu bạc6 Huy hiệu đồng1 silver badge6 bronze badges

3

Vì một số lý do, hầu hết các phương pháp trên không hoạt động với tôi. Tất cả các phương thức trả về loại enum dưới dạng số nguyên. Tôi đang làm việc với Python 3.7.

Trong giải pháp của tôi, tôi đã xác định chức năng lớp để xử lý việc này. Nó không hoàn toàn là Pythonic, nhưng hoạt động đủ tốt cho trường hợp của tôi.

>>> cur_status = get_Status()
>>> print(cur_status)
1
0

Bản in:

>>> cur_status = get_Status()
>>> print(cur_status)
1
8

Có vẻ như rõ ràng là chúng tôi đã yêu cầu trạng thái sau khi cho nó trạng thái, nhưng trong trường hợp của tôi, điều này được đặt theo chương trình ở nơi khác

Đã trả lời ngày 9 tháng 6 năm 2021 lúc 21:57Jun 9, 2021 at 21:57

Hướng dẫn python enum get value by key - python enum lấy giá trị theo khóa

RexbarkerrexbarkerRexBarker

1.14813 Huy hiệu bạc12 Huy hiệu đồng13 silver badges12 bronze badges

Những người liệt kê trong Python là gì?

Enum là một lớp trong Python để tạo các 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. Các thành viên của một bảng liệt kê có thể được so sánh bởi các anmes tượng trưng này và bản thân sự liệt kê có thể được lặp lại.a set of symbolic names (members) bound to unique, constant values. The members of an enumeration can be compared by these symbolic anmes, and the enumeration itself can be iterated over.

Tự động trong Enum Python là gì?

Phương thức tự động (), chúng ta có thể tự động nhận giá trị số nguyên được gán bằng cách sử dụng enum. phương thức tự động (). Cú pháp: Enum.Auto () tự động gán giá trị số nguyên cho các giá trị của các thuộc tính lớp Enum.Automatically assign the integer value to the values of enum class attributes.

Bạn có nên sử dụng Enums trong Python?

Các enum Python rất hữu ích để đại diện cho dữ liệu đại diện cho một tập hợp các trạng thái hữu hạn như ngày trong tuần, tháng trong năm, v.v. Chúng đã được thêm vào Python 3.4 qua PEP 435. Tuy nhiên, nó có sẵn tất cả các cách trở lại 2.4 thông quapypy.Như vậy, bạn có thể mong đợi chúng là một yếu tố chính khi bạn khám phá lập trình Python.useful to represent data that represent a finite set of states such as days of the week, months of the year, etc. They were added to Python 3.4 via PEP 435. However, it is available all the way back to 2.4 via pypy. As such, you can expect them to be a staple as you explore Python programming.

Có nên 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.