MessageField 類別

MessageField 類別是用於定義訊息,以便提高整個網路或程序空間中的傳輸效率。訊息可使用欄位類別加以定義。

MessageFieldprotorpc.messages 模組提供。

建構函式

MessageField 類別的建構函式定義如下:

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

定義子訊息值的欄位。

引數
message_type
欄位的訊息類型。必須是 Message 的子類別。
number
欄位編號。每種訊息類別的欄位號碼皆必須與其他類別不同。
required=False
這個欄位是否為必填欄位。與 repeated 引數互斥;若使用 required=True,請勿指定 repeated=True
repeated=False
這個欄位是否為重複欄位。與 required 引數互斥;如果使用 repeated=True,請勿指定 required=True

如果 message_type 無效,則會引發 FieldDefinitionError

類別屬性

MessageField 類別提供下列屬性:

type
用於此欄位值的 Python 類型。舉例來說,如果是 DateTimeFieldtype 就是 datetime.datetime。對於使用者定義的 MessageFields,type 是指定的 Message 類型。
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'>