对象在python的protobuf上没有属性'add'

lit*_*019 2 python protocol-buffers

我想在python上测试protobuf API上的嵌套消息.

我的原型ndemo.proto文件是:

package ndemotest;

message BaseRequest
{
    required bytes Key = 1;
}

message ContRequest
{
    required BaseRequest baseRequest = 1;
    optional string Url = 2;
}
Run Code Online (Sandbox Code Playgroud)

我的python ndemo.py代码是:

import binascii
import ndemo_pb2


contReq = ndemo_pb2.ContRequest()
contReq.Url="www.google.com"

base_request = contReq.baseRequest.add()
base_request.Key="12345"


packed_data = contReq.SerializeToString()

print 'sending "%s"' % binascii.hexlify(packed_data) 
Run Code Online (Sandbox Code Playgroud)

当我运行我的脚本时python ndemo.py,出现了错误

回溯(最近一次调用最后一次):文件"ndemo.py",第8行,在base_request = contReq.baseRequest.add()中AttributeError:'BaseRequest'对象没有属性'add'

Tho*_*Lee 6

你只有add()一个repeated领域,这就是它的重点.

在你的情况下,baseRequestrequired,你只需简单地把价值直接在分配到外地BaseRequest,如:

contReq = ndemo_pb2.ContRequest()
contReq.baseRequest.key = "12345"
Run Code Online (Sandbox Code Playgroud)