如何获取Python Protobuf消息枚举字段的值名称

13

我还不熟悉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
3个回答

6

EnumTypeWrapper类有一个Name方法,用于返回enmum值的名称。因此,在导入来自Message_pb2SourceType之后,SourceType.Name()将返回该值的名称。


1

我相信在你的示例中使用EnumDescriptor是获取枚举值名称的唯一方法。当然,你可以编写一个帮助函数来简化它。


我写了一个辅助函数 :( - mihaicc

0
你可以使用EnumTypeWrapper.Name()方法。
如果枚举中有多个项,EnumTypeWrapper.Name()需要位置参数'number',例如。
 enum SourceType {
     DB = 0;
     WEB = 1;
 }

SourceType.Name(1)将返回WEB


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接