我有一条 protobuf 消息,形式为:
message CustomMessage
{
SubMessageTypeA a_msg = 1;
SubMessageTypeB b_msg = 2;
SubMessageTypeC c_msg = 3;
}
我有几个这种类型的对象(假设 3 个),每个对象都填充了各自的字段之一。 我想在 Python 中将这些对象整理成 1。 这是我未成功使用的代码片段。感谢您帮助找到正确答案:
collated_obj = CustomMessage()
for obj in [obj_1, obj_2, obj_3]:
for desc in obj.DESCRIPTOR.fields:
getattr(collated_obj, desc.name).CopyFrom(getattr(obj, desc.name))
我做的东西很脆,一直没起作用。一开始,如果该字段是基本类型(例如 uint32),则 getattr 失败。 除了使用
getattr
之外,有没有办法找到对原型字段的引用?似乎那是我坚持的主要部分。
我可以将所有内容都转换为 json,让生活更轻松。但尽可能避免重复转换和序列化/反序列化。
您可以使用 MergeFrom() 合并两个 protobuf 消息的内容,这比使用描述符方法容易得多,如果字段是基本类型,则值将被替换,如果它们重复,则将被连接起来。
from custom_message_pb2 import CustomMessage, SubMessageTypeA, SubMessageTypeB, SubMessageTypeC
collated_obj = CustomMessage()
for obj in [obj_1, obj_2, obj_3]:
collated_obj.MergeFrom(obj)