2015-07-30 2 views
2

Я еще не в protobuf, но я постараюсь рассказать вопрос. Учитывая, у меня есть:Как получить значение имя поля перечисления python protobuf

enum SourceType { 
    WEB = 1; 
    } 
    message Message { 
    optional SourceType source = 6; 
    } 

У меня есть сообщение, которое является экземпляром сообщения, и я хочу, чтобы получить значение источника так же, как печать сообщения. Но выполнение message.source дает мне код. Я хочу получить значение только от объекта, а не используя другие перечисления/сопоставления/константы. В последней строке у меня есть пример того, как я могу достичь ожидаемого значения, но я ищу более элегантный способ.

> message  
    <Message_pb2.Message object at 0x7f78561a83c8> 
    > print message 
    source: WEB 
    > print message.source 
    1 
    > message.DESCRIPTOR.fields_by_name['source'].enum_type.values_by_number[1].name 
    WEB 

ответ

1

Я считаю, что с помощью EnumDescriptor, как вы делали в вашем примере это единственный способ, чтобы получить имя значения перечисления в. Вы могли бы, конечно, написать вспомогательную функцию вокруг нее, чтобы сделать ее менее подробной.

+0

Я написал функцию помощника :( – mihaicc

Смежные вопросы