【发布时间】:2019-07-26 14:42:30
【问题描述】:
我正在编写一个 Python 应用程序来序列化和发送 protobuf3 消息。我想制作某种交互式 UI,允许选择一条消息并即时分配它。我有相当多的这些消息,因此我不想为每条消息都创建一个 get 函数,而是创建一个可以处理所有消息的函数。
对于get所有消息字段,我可以简单地获取所有消息的属性并选择那些是它的字段,这很容易。然后,要知道属性是什么类型,我使用type(getattr(my_message, current_field))。现在有问题了。假设这些是我的消息:
message myMess1 {
//some fields
}
message myMess2 {
string some_string = 1
repeated myMess1 myMess1Field = 2
}
现在,分配 some_string 字段没有问题。
type(getattr(myMess2Instance, someStringFieldName)) 返回string,所以我知道用字符串喂它。
但是如何处理重复的 myMess1 字段?
type(getattr(MyMess2Instance, myMess1FieldName)) 实际上返回 google.protobuf.pyext._message.RepeatedCompositeContainer,它没有说明其中包含什么类型。我怎样才能得到它?
【问题讨论】:
标签: python serialization protocol-buffers backend proto