65

例如,我有 proto-file File.proto

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

File_pb2.py我使用 protoc生成文件File.proto。我想在 python 代码中通过值 1(对应于 File_pb2.ONE 的值)从生成的文件中获取字符串“ONE”(对应于 File_pb2.ONE 的名称)File_pb2.py而不定义我自己的字典。我怎样才能做到这一点?

4

1 回答 1

102

假设生成的 python 位于 File_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')
于 2012-07-16T10:38:43.263 回答