擅长:python、mysql、java
<p>默认情况下,Pyro使用Serpent序列化程序,而Serpent序列化程序又使用python的基元类型将内容序列化为。通常这是一本字典。如果它是一个不容易识别的类,或者该类没有定义“合适的”序列化方法,它将返回到一个特殊的字典形式,例如:</p>
<pre><code>{
"__class__": "pakcage.Classname"
"property1": "value1",
...
}
</code></pre>
<p>你看不到这个在你的序列化形式。这意味着它不是Pyro(或者说蛇)为您序列化的。所发生的(我认为)是Protobuf对象定义了一个uu getstate_uuu()方法,该方法返回您看到的Protobuf对象的序列化形式。与此相反的是uu setstate_uuuu(…)(这些方法是从Python内置的pickle序列化程序机制‘借用’来的)。我没有使用protobufs的经验,但我猜很简单:</p>
<pre><code>u = proxy.MyProtoBuf
message = mpb.MyProtobufMessage() # create empty protobuf object (??)
message.__setstate__(u)
</code></pre>
<p>会成功的。我建议您查看protobuf的文档,了解它们的对象是如何序列化的(您可能需要搜索它们是如何被pickle的)。底线:这不是火神(或蛇)所能控制的。你知道吗</p>