Protobuf изменить поле по индексу в Python - PullRequest
0 голосов
/ 27 марта 2020
proto2

message Test {
  optional string fieldA = 1;
  optional string fieldB = 2;
}

В Python2 как я могу изменить поле, если у меня есть только индекс?

Например, я бы хотел установить поле с индексом 1 равным "Value1"

В C ++ эквивалент будет использовать:

const FieldDescriptor *Descriptor::field(int index) const

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor#Descriptor .field.details

1 Ответ

0 голосов
/ 27 марта 2020

Каждый сгенерированный класс сообщений protobuf имеет поле DESCRIPTOR: https://developers.google.com/protocol-buffers/docs/pythontutorial

Взгляните на Дескриптор Документация:

fields: (список FieldDescriptors) Дескрипторы полей для всех полей этого типа.

Поэтому, чтобы получить имя поля по индексу, используйте:

field_name = message.DESCRIPTOR.fields[index].name

Затем вы можете установить значение с помощью setattr:

setattr(message, field_name, 'new_value')

(см .: с использованием отражения протобуферов Google в python)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...