程序在protobuf中不识别重复的复合容器?
我有一个使用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
来获取。