MessageField 類別是用於定義訊息,以便提高整個網路或程序空間中的傳輸效率。訊息可使用欄位類別加以定義。
MessageField
由 protorpc.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 類型。舉例來說,如果是 DateTimeField,
type
就是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'>