如何在python中按数字获取顶级protobuf枚举值名?

2024-09-27 23:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有proto文件File.proto

enum Test {
  ONE = 1;
  TWO = 2;
}

我用protoc从File.proto生成文件File_pb2.py。 我希望在python代码中,通过值1(对应于文件pb2.ONE的值)从生成的文件File_pb2.py中获取字符串“ONE”(对应于文件pb2.ONE的名称),而无需定义自己的字典。我该怎么做?


Tags: 文件字符串代码pytest名称字典定义
1条回答
网友
1楼 · 发布于 2024-09-27 23:26:11

假设生成的python位于文件pb2.py代码中,请尝试以下操作:

file_pb2._TEST.values_by_number[1].name

在你的例子中,这应该给出'ONE'

相反的是:

file_pb2._TEST.values_by_name['ONE'].number

将给出1

编辑:正如@dyoo在评论中正确指出的,protobuf库后来引入了一种新方法:

file_pb2.Test.Name(1)
file_pb2.Test.Value('One')

编辑:这在proto3中再次改变。现在Name()和Value()方法属于EnumTypeWrapper类,因此可以像下面这样访问它们:

file_pb2.Name(1)
file_pb2.Value('One')

相关问题 更多 >

    热门问题