La classe MessageField

La classe MessageField viene utilizzata per definire i messaggi per una trasmissione efficiente tra la rete o lo spazio di processo. I messaggi vengono definiti utilizzando classi di campi.

MessageField è fornito dal modulo protorpc.messages.

Costruttore

Il costruttore della classe MessageField è definito come segue:

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

Definisce i campi per i valori dei messaggi secondari.

Argomenti
message_type
Il tipo di messaggio per il campo. Deve essere una sottoclasse di Message.
number
Numero del campo. Deve essere univoco per ogni classe di messaggio.
required=False
Se questo campo è obbligatorio o meno. Si escludono a vicenda con l'argomento repeated. Non specificare repeated=True se utilizzi required=True.
repeated=False
Indica se questo campo viene ripetuto o meno. Esclusivo con l'argomento required. Non specificare required=True se utilizzi repeated=True.

Genera un FieldDefinitionError se message_type non è valido.

Proprietà del corso

La classe MessageField fornisce le seguenti proprietà:

type
Il tipo Python utilizzato per i valori di questo campo. Ad esempio, nel caso di DateTimeField, type è datetime.datetime. Per MessageFields definito dall'utente, type è il tipo di messaggio specificato.
message_type
Il tipo di messaggio sottostante utilizzato per la serializzazione. Nello specifico, si tratta del tipo che puoi memorizzare in un'istanza di una classe Message. Ad esempio, per DateTimeField, il tipo sarà message_types.DateTimeMessage. Per i campi dei messaggi normali, sarà la sottoclasse del messaggio protorpc. Ad esempio:
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'>