Par exemple, j'ai un fichier proto File.proto
:
enum Test {
ONE = 1;
TWO = 2;
}
Je génère un fichier File_pb2.py
avec protocole de File.proto
. Je veux dans un code python obtenir la chaîne "ONE" (qui correspond au nom de File_pb2.ONE) par la valeur 1 (qui correspond à la valeur de File_pb2.ONE) à partir du fichier généré File_pb2.py
sans définir mes propres dictionnaires. Comment puis je faire ça?
En supposant que le python se trouve dans le code File_pb2.py), essayez ceci:
file_pb2._TEST.values_by_number[1].name
Dans votre cas, cela devrait donner 'ONE'
L'inverse est:
file_pb2._TEST.values_by_name['ONE'].number
va donner 1
.
EDIT: Comme indiqué correctement par @dyoo dans les commentaires, une nouvelle méthode a ensuite été introduite dans la bibliothèque protobuf:
file_pb2.Test.Name(1)
file_pb2.Test.Value('One')
EDIT: Cela a encore changé dans proto3. Désormais, les méthodes Name () et Value () appartiennent à la classe EnumTypeWrapper afin qu'elles soient accessibles comme:
file_pb2.Name(1)
file_pb2.Value('One')