J'utilise des tampons de protocole python lib pour envoyer des données, mais il y a quelques problèmes, donc
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.
le src comme suit:
fichier proto:
message task {
required int32 id = 1;
required string msg = 2;
}
message task_info {
required task task = 1;
}
code python:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task = task # this line happen the runtime error
Je ne connais pas les tampons de protocole mais j'ai jeté un coup d'œil à la documentation et il dit:
Vous ne pouvez pas attribuer de valeur à un champ de message incorporé. Au lieu de cela, attribuer une valeur à n'importe quel champ dans le message enfant implique de définir le champ de message dans le parent.
Je suppose donc que cela devrait fonctionner:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.id = task.id
ptask.task.msg = task.msg
Essayez CopyFrom :
ptask.task.CopyFrom(task)
Je suis nouveau dans les tampons de protocole et je suis confronté au même problème. J'ai trouvé cette méthode utile.
Je pense que cela devrait fonctionner:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.MergeFrom(task)