![](/img/trans.png)
[英]How to get top-level protobuf enum value name by number in python?
[英]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.