Protocol-buffers python libを使用してデータを送信していますが、いくつか問題があります。
Traceback (most recent call last):
File "test_message.py", line 17, in <module>
ptask.task = task
File "build\bdist.win32\Egg\google\protobuf\internal\python_message.py", line
513, in setter
AttributeError: Assignment not allowed to composite field "_task" in protocol message object.
次のようにsrc:
protoファイル:
message task {
required int32 id = 1;
required string msg = 2;
}
message task_info {
required task task = 1;
}
pythonコード:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task = task # this line happen the runtime error
protocol-buffersはわかりませんが、- the docs を確認すると、次のように表示されます。
埋め込みメッセージフィールドに値を割り当てることはできません。代わりに、子メッセージ内の任意のフィールドに値を割り当てると、親のメッセージフィールドが設定されます。
だから私はこれがうまくいくと思います:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.id = task.id
ptask.task.msg = task.msg
試す CopyFrom :
ptask.task.CopyFrom(task)
私もプロトコルバッファに不慣れで、同じ問題に直面しています。私は この方法 を見つけました。
私はそれがうまくいくと思います:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.MergeFrom(task)