程序无法识别protobuf中的重复复合容器?

时间:2014-06-23 17:11:55

标签: python protocol-buffers

我有一个protobuf,其中包含存储在地址簿中的重复字段。

到目前为止,我开始这样做了:

 addressbook = Book()
 jake = addressbook.persons.add()
 jake.phone = 33333

 lucy = Person()
 lucy.phone = 44444

 taylor = Person()
 taylor.phone = 55555

 addressbook.persons.extend([lucy, taylor])

我有另一个文件应该通过地址簿并将其与另一个地址簿进行比较,以查看它是否是相同的地址簿。到目前为止,我这样做:

#book_vars are variables within the address book, like people 
for item in book_vars:
    if isinstance(getattr(book1, item), collections.Iterable:
        do stuff

然而,它永远不会进入if循环。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

protobufs用于表示重复字段的类不是Python本机列表类型,并且不继承collections.Iterable,因此您的代码不会按照您的意图检测重复字段。告诉protobuf消息中每个字段类型的更好方法是使用descriptorMyMessageType.DESCRIPTOR