在python fi中使用google.protobuf.Any

2024-05-23 17:52:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的.proto文件

syntax = "proto3";
import "google/protobuf/any.proto";

message Request {
  google.protobuf.Any request_parameters = 1;
}

如何创建Request对象并填充其字段?我试过这个:

import ma_pb2
from google.protobuf.any_pb2 import Any

parameters = {"a": 1, "b": 2}
Request = ma_pb2.Request()
some_any = Any()
some_any.CopyFrom(parameters)
Request.request_parameters = some_any

但我有个错误:

TypeError: Parameter to CopyFrom() must be instance of same class: expected google.protobuf.Any got dict.

更新

以下@Kevin I的提示将新消息添加到.proto文件:

message Small {
  string a = 1;
}

现在代码如下:

Request = ma_pb2.Request()
small = ma_pb2.Small()
small.a = "1"

some_any = Any()
some_any.Pack(small)

Request.request_parameters = small

但在最后一次作业中,我犯了一个错误:

Request.request_parameters = small
AttributeError: Assignment not allowed to field "request_parameters" in protocol message object.

我做错了什么?


Tags: 文件importmessagerequestgoogleanysomesmall