MessageField 类

MessageField 类用于定义消息,以跨网络或进程空间进行高效传输。消息使用 field 类进行定义。

MessageFieldprotorpc.messages 模块提供。

构造函数

MessageField 类的构造函数定义如下:

class MessageField(message_type, number, [required=False | repeated=False])

定义用于子消息值的字段。

参数
message_type
字段的消息类型。必须是消息的子类。
number
字段的编号。每个消息类的编号必须是唯一的。
required=False
此字段是否为必需项。与 repeated 参数相互排斥;如果使用 required=True,请勿指定 repeated=True
repeated=False
此字段是否重复。与 required 参数相互排斥;如果使用了 repeated=True,请勿指定 required=True

如果 message_type 无效,则会引发 FieldDefinitionError

类属性

MessageField 类提供以下属性:

type
用于此字段的值的 Python 类型。例如,对于 DateTimeFieldtypedatetime.datetime。对于用户定义的 MessageField,type 是指定的消息类型。
message_type
用于序列化的基础消息类型。具体而言,您可以在 Message 类的实例上存储此类型。例如,对于 DateTimeField,类型将为 message_types.DateTimeMessage。对于普通消息字段,这将是 protorpc 消息子类。例如:
class Sub(messages.Message):
  x = messages.IntegerField(1)

class M(messages.Message):
  sub = messages.MessageField(Sub, 1)
  dt = message_types.DateTimeField(2)

print 'M.sub.type         =', M.sub.type
print 'M.sub.message_type =', M.sub.message_type
print 'M.dt.type          =', M.dt.type
print 'M.dt.message_type  =', M.dt.message_type

=== output ===
M.sub.type                 = <class '__main__.Sub>
M.sub.message_type = <class '__main__.Sub'>
M.dt.type                   = <type 'datetime.datetime'>
M.dt.message_type   = <class 'protorpc.message_types.DateTimeMessage'>