我有一个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循环。有人有什么想法吗?
答案 0 :(得分:1)
protobufs用于表示重复字段的类不是Python本机列表类型,并且不继承collections.Iterable
,因此您的代码不会按照您的意图检测重复字段。告诉protobuf消息中每个字段类型的更好方法是使用descriptor,MyMessageType.DESCRIPTOR
。