Hướng dẫn python enum name to string - tên enum python thành chuỗi

57

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

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 name to string - tên enum python thành chuỗi

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

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

0

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

992K277 Huy hiệu vàng3907 Huy hiệu bạc3255 Huy hiệu Đồng277 gold badges3907 silver badges3255 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.38142 Huy hiệu bạc38 Huy hiệu đồng42 silver badges38 bronze badges

2

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

Đã 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 name to string - tên enum python thành chuỗi

TechneerTechneertechneer

1371 Huy hiệu bạc6 Huy hiệu đồng1 silver badge6 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 name to string - tên enum python thành chuỗi

DeusxmachinadeusxmachinaDeusXMachina

1.1521 Huy hiệu vàng14 Huy hiệu bạc26 Huy hiệu đồng1 gold badge14 silver badges26 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 name to string - tên enum python thành chuỗi

RexbarkerrexbarkerRexBarker

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

Làm thế nào để bạn truy cập 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 ..

Enums có phải là python không?

Giống như danh sách, bộ dữ liệu, hoặc từ điển, bảng liệt kê Python cũng có thể lặp lại. Đó là lý do tại sao bạn có thể sử dụng danh sách () để biến một bảng liệt kê thành một danh sách các thành viên liệt kê.Python enumerations are also iterable. That's why you can use list() to turn an enumeration into a list of enumeration members.

Tôi có nên sử dụng Enum trong Python không?

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

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.