1

我有以下 protobuf 定义:

syntax = "proto3";                                                                                                                                                                                                                                                                                                                                                                                                              
message ACL {                                                                                                                                                                                                   
  enum Foo {
    BAR = 0;
    BAZ = 1;
  }
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
  }
  Foo foo = 1;
  Corpus corpus = 2;
}

当我在 Python 中使用时,它将存储/显示 corpus 字段而不是 foo 字段:

>>> import acl_pb2
>>> p = acl_pb2.ACL(foo="BAR", corpus="WEB")
>>> p
corpus: WEB
4

1 回答 1

3

在 proto3 中,零是默认值,默认值是零。不传输默认值(零),因此:没有为 发送实际数据foo = "Bar",因为那是零。但是,您的模型应该能够发现foo存在并具有Bar/的隐含值0。如果没有,这听起来像是对 python 代码生成的好奇。

于 2020-02-21T11:50:22.080 回答