たとえば、私はプロトファイルを持っていますFile.proto
:
enum Test {
ONE = 1;
TWO = 2;
}
File_pb2.py
からprotocを使用してファイルを生成しますFile.proto
。File_pb2.py
自分の辞書を定義せずに、生成されたファイルから値1(File_pb2.ONEの値に対応)で文字列 "ONE"(File_pb2.ONEの名前に対応)を取得するPythonコードが必要です。どうやってやるの?
たとえば、私はプロトファイルを持っていますFile.proto
:
enum Test {
ONE = 1;
TWO = 2;
}
File_pb2.py
からprotocを使用してファイルを生成しますFile.proto
。File_pb2.py
自分の辞書を定義せずに、生成されたファイルから値1(File_pb2.ONEの値に対応)で文字列 "ONE"(File_pb2.ONEの名前に対応)を取得するPythonコードが必要です。どうやってやるの?
生成された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')