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
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 Pieters♦Martijn 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
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
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
0Bản in:
>>> cur_status = get_Status[]
>>> print[cur_status]
1
8Có 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
RexbarkerrexbarkerRexBarker
1.13813 Huy hiệu bạc12 Huy hiệu đồng13 silver badges12 bronze badges