web-dev-qa-db-ja.com

AttributeError:割り当ては、プロトコルメッセージオブジェクトのフィールド「タスク」を合成することはできません

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 
29
gezhonglunta

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
22
Martin Maillard

試す CopyFrom

ptask.task.CopyFrom(task)
62
John McFarlane

私もプロトコルバッファに不慣れで、同じ問題に直面しています。私は この方法 を見つけました。

私はそれがうまくいくと思います:

task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info() 
ptask.task.MergeFrom(task)
15