65

たとえば、私はプロトファイルを持っていますFile.proto

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

File_pb2.pyからprotocを使用してファイルを生成しますFile.protoFile_pb2.py自分の辞書を定義せずに、生成されたファイルから値1(File_pb2.ONEの値に対応)で文字列 "ONE"(File_pb2.ONEの名前に対応)を取得するPythonコードが必要です。どうやってやるの?

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 に答える