Протобуф странного поведения с перечислениями - PullRequest
1 голос
/ 21 февраля 2020

У меня есть следующее определение protobuf:

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

Когда я использую в Python, оно будет хранить / показывать поле корпуса, но не поле foo:

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

1 Ответ

3 голосов
/ 21 февраля 2020

В proto3 нули являются значениями по умолчанию, а значения по умолчанию являются нулями. Значения по умолчанию (нули) не передаются, поэтому: фактические данные не отправляются для foo = "Bar", поскольку это ноль. Однако ваша модель должна обнаружить, что foo существует, а имеет неявное значение Bar / 0. Если это не так, это звучит как любопытство python code-gen.

...