79

I'm using protocol-buffers python lib to send data,but it's have some problems, so

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.

the src as follows:

proto file:

message task {
    required int32 id = 1;
    required string msg = 2;
}

message task_info {
    required task task = 1;
}

python code:

task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info() 
ptask.task = task # this line happen the runtime error 

3 Answers 3

145

Try CopyFrom:

ptask.task.CopyFrom(task)
Sign up to request clarification or add additional context in comments.

2 Comments

@Cu2S golden rule of StackExchange: always at least read the first two answers!
This is THE answer. The MergeFrom mentioned in other answers can also be useful sometimes.
48

I don't know protocol-buffers but I took a look at the docs and it says:

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.

So I'm assuming this should work:

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

1 Comment

This is the section of the docs where it talks about that. It also mentions the CopyFrom method.
23

I'm new to protocol-buffers too and faced with the same problem. I've found this method helpful.

I think it should work:

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

1 Comment

CopyFrom() calls MergeFrom() after Clearing the object

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.