[英]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.