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

1 投票
1 回答
5549 浏览
提问于 2025-04-18 10:48

我有一个使用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 个回答

3

protobuf使用的类来表示重复字段,并不是Python里常用的列表类型,也不继承collections.Iterable,所以你的代码无法像你想的那样检测到重复字段。要更好地判断protobuf消息中每个字段的类型,可以使用它的描述符,这个描述符可以通过MyMessageType.DESCRIPTOR来获取。

撰写回答