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
Каждый сгенерированный класс сообщений 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)