【发布时间】:2015-03-25 19:36:05
【问题描述】:
也许我已经找到了这个问题的答案,因为这是不可能的,但如果有一个绝妙的技巧......我全神贯注。我正在尝试在 python 中重现以下 C 枚举列表:
enum Id
{
NONE = 0,
HEARTBEAT, //0x1
FLUID_TRANSFER_REQUEST,
FLUID_TRANSFER_STATUS_MSG,
FLUID_TRANSFER_ERROR_MSG,
FLUID_TRANSFER_RESUME,
EMERGENCY_STOP_MSG,
LOG_MSG,
VERSION_REQUEST,
VERSION_RESPONSE,
CHANNEL_INFORMATION_REQUEST,
CHANNEL_INFORMATION_RESPONSE,
TEST_REQUEST,
LED_CONTROL_REQ,
RESET_REQ,
// Camera App Messages
START_SENDING_PICTURES = 0x010000,
STOP_SENDING_PICTURES,
START_RECORDING_VIDEO_REQ,
STOP_RECORDING_VIDEO_REQ,
TAKE_PICTURE_REQ,
SET_VOLUME_LIMIT,
VIDEO_FRAME_MSG,
PICTURE_MSG,
I_FRAME_REQUEST,
CURRENT_VOLUME,
START_ANALYZING_IMAGES_REQ,
STOP_ANALYZING_IMAGES_REQ,
SET_FILE_PATH,
//Sensor Calibration
VOLUME_REQUEST = 0x020000,
START_CAL,
CLI_COMMAND_REQUEST,
CLI_COMMAND_RESPONSE,
// File Mananger
NEW_DELIVERY_REQ = 0x30000,
GET_DELIVERY_FILE_REQ,
GET_FILE_REQ,
ACK_NACK,
RESPONSE,
LAST_ID
};
但是,我不想为列表指定每个值,因为它经常变化。由于我还在各个部分将其设置为新值,因此我无法使用自动编号方法(例如 VOLUME_REQUEST = 0x020000)。任何人都有在 python 中重现 C 样式枚举的聪明技巧,还是我坚持以困难的方式重现它?
【问题讨论】:
-
@David,我在发布How can I represent an 'Enum' in Python? 之前确实看到过,但我认为它没有很好地回答我的具体要求。我相信下面的答案更适合这个特定的请求。
-
这里的答案是那里答案的一个子集,并且是一个苍白的模仿。我建议您更仔细地阅读这些答案。
-
我刚刚浏览了这些答案,但没有一个能解决 OP 的问题。如果您对我的凭据感到好奇:我是 Enum data type 和 enum34 backport 的主要作者。