这是我首先想到的,由于没学习过Python,恶补了一下Python基础后,研究发现Protobuf是把Decode的函数入口放在了一个数组中,在引入模块的时候就会自动初始化这些入口函数,然后保存到各个Protobuf类中,各个PB类都有一个decoders_by_tag字典,这个字典就存放了各种数据类型的解析函数入口地址。
protobuf定义的标量数据类型,其对应于C++中的数据类型,名称上基本相同。 int32->int32_t , int64->int64_t , string->string等。 protobuf的数据类型与C++,Java,Python和Go语言中的数据类型都有一一对应的关系。 复合类型 oneof类型 类似C语言的union。 message SampleMessage { oneof test_oneof { string n...
我们要用 protobuf 文件生成 Python 文件,所以 --python_out 负责指定 Python 文件的输出路径,这里是当前目录;-I 表示从哪里寻找 protobuf 文件,这里也是当前目录;最后的 girl.proto 就是指定的 protobuf 文件了。 我们执行该命令,会发现执行完之后多了一个 girl_pb2.py,我们直接用即可。注意:这是基于 protob...
out_dir ="proto_dump"withopen(os.path.join(out_dir,"person.pb"),"wb")asf:# binary outputf.write(person.SerializeToString())withopen(os.path.join(out_dir,"person.protobuf"),"w")asf:# human-readable output for debuggingf.write(str(person)) 执行完代码段后,可以在proto_dump/person.proto...
下面是proto2的example: syntax = "proto2"; package tutorial; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { ...
下面来编写 .proto 文件。 // 文件名:girl.protosyntax = "proto3";package girl;// 枚举成员的值必须是整数enum Gender {MALE = 0;FEMALE = 1;}message UserInfo {string name = 1;int32 age = 2;Gender gender = 3;}message Girls {// 列表里面的类型也可以是 message 定义的消息体repeated UserInfo...
string type = 1; } 创建message对象,然后赋值即可。与python中,通过类创建实例,实例.属性的方式进行赋值类似 search_service = pb.SearchService() search_service.type = "request" 数字型 test.proto message SearchService { int32 id = 2; }
protobuf,pythonEnum protobuf,pythonEnum 继承enum.Enum的python class,其实是⼀个, name-value的关系,可以直接className(value)得到⼀个类。⽐如 import enum class xx(enum.Enum):NAME = 'value'print(xx('value'))print(xx.NAME.name)print(xx.NAME.value)如果只知道属性名字,可以⽤print(getattr(...
写入一个 protobuf,并生成对应的结构文件 按照上面的例子,我们写入一个 protobuf 结构,并命名为demo.proto 代码语言:javascript 复制 syntax="proto3";message Person{string name=1;int32 id=2;string email=3;int32 phone=4;} 然后借助protoc.exe去生成对应的 python 结构文件 ...
message ImageData{string index=1;bytes image=2;}message Data{string appid=1;bytes payload=2;string extra=3;}message Request{google.protobuf.Any body=1;} 在Python中的使用: 代码语言:javascript 复制 imageData=msg_pb2.ImageData(index="001",image=open("1.jpg","rb").read())req1=msg_pb2...