В общем, у меня есть определение protobuf, в котором используется ключевое слово Python "from" . Он работает в Java/С#/С++, но когда приходит на Python, я не могу присвоить ему значение.
Вот деталь моей проблемы.
У меня есть определение protobuf, как показано ниже:
message Foo
{
required int64 from = 10
...
}
Поскольку поле "from" является ключевым словом в Python, после того, как я сгенерировал код python, я не смог скомпилировать код, как показано ниже:
foo = Foo()
foo.from = 1234
Затем я попытался использовать setattr() для установки атрибута:
setattr(foo, 'from', 1234)
Это дает мне исключение Protobuf:
AttributeError: Assignment not allowed to composite field "from" in protocol message object.
Я не мог изменить определение в данный момент, потому что он широко использовался в системе. Любая помощь будет оценена, если я могу обходным путем использовать атрибут "from" в Python.
Ниже приведен код, созданный ProtoBuf:
import sys
_FOO = _descriptor.Descriptor(
name='Foo',
full_name='com.kerneljoy.Foo',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='from', full_name='com.kerneljoy.Foo.from', index=0,
number=10, type=3, cpp_type=2, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
extension_ranges=[],
oneofs=[
],
serialized_start=28,
serialized_end=47,
)
DESCRIPTOR.message_types_by_name['Foo'] = _FOO
Foo = _reflection.GeneratedProtocolMessageType('Foo', (_message.Message,), dict(
DESCRIPTOR = _FOO,
__module__ = 'Foo_pb2'
# @@protoc_insertion_point(class_scope:com.kerneljoy.Foo)
))
_sym_db.RegisterMessage(Foo)