程序不能识别在protobuf中重复的复合容器



我有一个protobuf,在一个地址本中存储了一个重复的People字段。

到目前为止,我是这样开始的:
 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循环。有人知道为什么吗?

protobufs用来表示重复字段的类不是Python原生列表类型,也不继承collections.Iterable,因此您的代码将无法检测到您想要的重复字段。告诉protobuf消息中每个字段类型的更好方法是使用它的描述符,如MyMessageType.DESCRIPTOR

最新更新