我正在处理大量具有相似但不完全相同结构的消息类型。这些中常见的所有东西都在另一个消息中。当收到消息时,我使用公共消息类型解析它。但是,我似乎无法找到一种方法来访问此类型之外的字段(即非公共字段)。有没有办法访问python中设置的未知字段?
修改 我刚刚在文档中看到了这一点:
" 如果消息包含未知字段,则当前Java和C ++实现在按顺序排序的已知字段之后以任意顺序写入它们。当前的Python实现不会跟踪未知字段。"
这是否意味着如果我使用常见类型解析,例如:
proto = msg_pb2.Common()
proto.ParseFromString(raw_msg)
消息Common中未定义的任何字段都被丢弃了?
答案 0 :(得分:0)
对于寻找答案的人,reflection
模块帮助了我:
ideone
相关示例代码:
样本用法:
file_descriptor = descriptor_pb2.FileDescriptorProto()
file_descriptor.ParseFromString(proto2_string)
msg_descriptor = descriptor.MakeDescriptor(file_descriptor.message_type[0])
msg_class = reflection.MakeClass(msg_descriptor)
msg = msg_class()
Args:
descriptor: A descriptor.Descriptor object describing the protobuf.
Returns:
The Message class object described by the descriptor.