如何获取python protobuf消息的枚举字段的值名称

时间:2015-07-30 15:46:13

标签: python enums protocol-buffers

我还没有进入protobuf,但我会试着说一个问题。鉴于我有:

  enum SourceType {
     WEB = 1;
  }
  message Message {
    optional SourceType source = 6;
  }

我有消息,它是Message的一个实例,我想获取源的值就像打印消息一样。但是做message.source给了我代码。我想从对象中获取值,而不是使用其他枚举/映射/常量。在最后一行中,我有一个如何达到预期值的例子,但我正在寻找一种更优雅的方式。

  > message    
  <Message_pb2.Message object at 0x7f78561a83c8>
  > print message
  source: WEB
  > print message.source 
  1
  > message.DESCRIPTOR.fields_by_name['source'].enum_type.values_by_number[1].name 
  WEB

2 个答案:

答案 0 :(得分:1)

我相信在您的示例中使用EnumDescriptor是获取枚举值名称的唯一方法。当然,你可以在它周围写一个辅助函数,以减少它的冗长。

答案 1 :(得分:1)

EnumTypeWrapper类具有一个Name方法,该方法返回一个enmum值的名称。因此,在这种情况下,从SourceType导入Message_pb2后,SourceType.Name()将返回值的名称。