软件版本
- 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下载
- python安装包也有镜像网站
- 关于为何使用该包可以参见
- google protobuf官网
基本代码示例
#声明消息头 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()方法也是个基本方法之一,注意的细节也说明了,其它问题应该都好解决。
https://repo1.maven.org/maven2/com/google/protobuf/protoc/ ↩︎
http://npm.taobao.org/mirrors/python/ ↩︎
https://blog.csdn.net/mzpmzk/article/details/80824839 ↩︎
https://developers.google.cn/protocol-buffers ↩︎