在Python中设置嵌套的非重复Protocol Buffers消息的值

时间:2016-01-22 19:45:38

标签: python protocol-buffers

全部, 为新手问题提前道歉,但我无法弄清楚如何设置嵌套的非重复消息的值。对于重复消息类型,我可以使用.add()将变量定义为嵌套消息,然后以直接方式设置参数。但是对于非重复的消息类型,我无法做到这一点。

我有以下架构:

syntax="proto2";
package pkgName;

message OuterLayer
{
    required string thing = 1;
    message InnerLayer 
    {
        optional string otherthing = 1;

    }

我原本以为我可以这样做:

message = proto_pb2.OuterLayer()
message.InnerLayer.otherthing = "bar"

现在 - 这并没有失败,但是当我在设置此内容后打印消息时,我看不到内容,让我相信它不起作用。例如,如果我在顶层设置参数:

message.thing = "foo"

然后打印出来:

print(message)

我明白了:

"thing" : "foo"

...但不是下一层的内容。

我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我感觉相当愚蠢,但这对我来说并不明显。希望这有助于其他人。我可以说,正确的方法是使用附加字段修改我的架构:

syntax="proto2";
package pkgName;

message OuterLayer
{
    required string thing = 1;
    message InnerLayer 
    {
        optional string otherthing = 1;

    }
    optional InnerLayer innerlevel = 2;

既然已经完成了,你可以按照预期的那样做:

message.innerlevel.otherthing = "foo"