适用于Protobuf的Python中的原始包装器

Roh*_*tty 2 python protocol-buffers

我正在使用proto3,并且在某些.proto文件中有一条消息定义为:

message Response {
  google.protobuf.BoolValue field = 1;
  ...
}
Run Code Online (Sandbox Code Playgroud)

为了Response在Python中进行初始化,我需要创建一个布尔基元包装器并附加一些值。

如果将这个值初始化为True,这很好。从Python笔记本中:

In [52]: from google.protobuf import wrappers_pb2 as wrappers
         boo = wrappers.BoolValue(value=True)
         boo

Out [52]: value: true
Run Code Online (Sandbox Code Playgroud)

如果要将此值初始化为False,则不会创建任何包装的对象:

In [52]: from google.protobuf import wrappers_pb2 as wrappers
         boo = wrappers.BoolValue(value=False)
         boo

Out [52]: 
Run Code Online (Sandbox Code Playgroud)

如何创建一个BoolValue初始化为false的?

Olu*_*ule 8

非truthy值从字段列表中删除这里实现

>> boo = wrappers.BoolValue(value=True)
>> boo.ListFields()
[(<google.protobuf.descriptor.FieldDescriptor object at 0x10a037bd0>, True)]

>> boo = wrappers.BoolValue(value=False)
>> boo.ListFields()
[]
Run Code Online (Sandbox Code Playgroud)

为了访问消息值,您可以这样编写:

>> boo = wrappers.BoolValue(value=True)
>> boo.value
True

>> boo = wrappers.BoolValue(value=False)
>> boo.value
False
Run Code Online (Sandbox Code Playgroud)