2013-08-22 5 views
18

次のように、そうはAttributeError:プロトコルメッセージオブジェクト内の複合フィールド「タスク」に許可されていない割り当て

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を、私は、データを送信するために、プロトコルバッファのPythonのlibを使用していますが、いくつかの問題があります:

プロトファイル:

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 

答えて

15

私はプロトコルバッファを知らないが、私はthe docsで見ていたし、それは言う:

You cannot assign a value to an embedded message field. Instead, assigning a value to any field within the child message implies setting the message field in the parent.

だから私はと仮定していますが、これは動作するはずです:

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

私はプロトコルバッファも新しく、同じ問題に直面していました。私はthis methodが役に立ちました。

私はそれが動作するはずだと思う:

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

CopyFromをお試しください:

ptask.task.CopyFrom(task) 
関連する問題