协议buf3,python-如何设置元素来映射<String,OtherMessage&>dict?

protobuf3, python - How to set element to maplt;string,OtherMessagegt; dict?(协议buf3,python-如何设置元素来映射lt;String,OtherMessagedict?)

本文介绍了协议buf3,python-如何设置元素来映射<String,OtherMessage&>dict?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试设置map<string,Y> dict of X的元素时 引发了ValueError。

"不允许直接分配子消息"

我的实验代码是

syntax = "proto3";

message X {
  map<string,Y> dict = 1;
}

message Y {
  int32 v = 1;
}

和python代码

x = x_pb2.X()
y = x_pb2.Y()
x.data['a'] = y

然后引发错误

Traceback (most recent call last):
  File "x.py", line 8, in <module>
    x.data['a'] = y
ValueError: Direct assignment of submessage not allowed

如何解决此问题?

推荐答案

我想这是最佳使用模式

x = x_pb2.X()
x.data['a'].v = 1

和另一个选项正在使用CopyFrom

x = x_pb2.X()
y = x_pb2.Y()
y.v=2
x.data['a'].CopyFrom(y)

这篇关于协议buf3,python-如何设置元素来映射&lt;String,OtherMessage&>dict?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:协议buf3,python-如何设置元素来映射&lt;String,OtherMessage&>dict?

基础教程推荐