簡體   English   中英

如何獲取python protobuf消息的枚舉字段的值名稱

[英]How to get value name of a python protobuf message's enum field

我還沒有進入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

我相信像你在你的例子中那樣使用EnumDescriptor是獲得枚舉值名稱的唯一方法。 當然,你可以在它周圍寫一個輔助函數,以減少它的冗長。

EnumTypeWrapper類有一個Name方法,它返回一個enmum值的名稱。 因此,在這種情況下,從Message_pb2導入SourceType后, SourceType.Name()將返回值的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM