软件版本
- Python: 3.7.3
- OS: Win7
- protoc: 3.11.2
- protobuf runtime library: 3.11.2
- protobuf runtime library install method: pip
- proto syntax: "proto2"
注意事项
- 使用编译工具
protoc
编译输出的.py
文件对python
解释器以及对应的protobuf
包都有版本要求 - 对应的嵌套
message
类在赋值时需要注意要求及方法的使用 - 因为
google protobuf
向前兼容,所以使用"proto2"
也可以 - 官方网站访问卡顿,下载
protoc
可以从maven
下载1 - python安装包也有镜像网站2
- 关于为何使用该包可以参见3
- google protobuf官网4
基本代码示例
#声明消息头
message_head = message_pb2.MessageBase.Header()
#枚举的赋值值得关注
message_head.type = message_pb2.MessageBase.SERVICE_REQ
#声明消息体,包含了一个Alarm对象的实例
message_body = message_pb2.MessageBase.Body()
message_body.context.MergeFrom(alarm)
#声明整个消息体并对其实例化,整合消息头和消息体的数据
message = message_pb2.MessageBase()
message.header.MergeFrom(message_head)
message.body.MergeFrom(message_body)
总结
下图是序列化的结果
前期把java的跑通了,最近迷上了python,也想跑通。官方提供了上述编码中遇到的MergeFrom()
方法也是个基本方法之一,注意的细节也说明了,其它问题应该都好解决。