Python 2.7 ha raggiunto la fine del supporto
e verrà
ritirato
il 31 gennaio 2026. Dopo il ritiro, non potrai eseguire il deployment di applicazioni Python 2.7, anche se la tua organizzazione ha utilizzato in precedenza un criterio dell'organizzazione per riattivare i deployment di runtime legacy. Le tue applicazioni Python 2.7 esistenti continueranno a essere eseguite e a ricevere traffico dopo la
data di ritiro. Ti consigliamo di
eseguire la migrazione all'ultima versione supportata di Python.
La classe Message
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
La classe Message viene utilizzata per definire i messaggi per una trasmissione efficiente nella rete o nello spazio di processo. I messaggi vengono definiti utilizzando le classi di campo.
Message
è fornito dal modulo protorpc.messages
.
Introduzione
I messaggi sono più limitati delle classi normali in quanto possono contenere solo attributi di campo e altre definizioni di Message ed Enum.
Queste limitazioni sono in vigore perché la struttura della classe Message stessa è progettata per essere trasmessa nello spazio di rete o di processo e utilizzata direttamente dai client o anche da altri server.
Di conseguenza, i metodi e gli attributi non di campo non possono essere trasmessi con informazioni strutturali, il che causa discrepanze tra lingue e implementazioni diverse.
Inizializzazione e convalida
Un oggetto Message è considerato inizializzato se contiene tutti i campi obbligatori e se sono inizializzati anche eventuali messaggi nidificati.
La chiamata a "check_initialized" genera un ValidationError se non è stato inizializzato; "is_initialized" restituisce un valore booleano che indica se è valido.
Google Protocol RPC convalida automaticamente gli oggetti Message quando vengono creati e compilati.
L'applicazione può convalidare se un determinato valore è compatibile con un campo a cui è assegnato utilizzando il metodo validate() dell'istanza Field. Se utilizzato su un messaggio, questo metodo verifica che tutti i valori di un messaggio e dei relativi messaggi secondari siano validi. L'assegnazione di un valore non valido a un campo genera un'eccezione ValidationError.
L'esempio seguente crea e inizializza gli oggetti Message in un'applicazione fittizia di negoziazione di azioni.
from protorpc import messages
# Trade type.
class TradeType(messages.Enum):
BUY = 1
SELL = 2
SHORT = 3
CALL = 4
class Lot(messages.Message):
price = messages.IntegerField(1, required=True)
quantity = messages.IntegerField(2, required=True)
class Order(messages.Message):
symbol = messages.StringField(1, required=True)
total_quantity = messages.IntegerField(2, required=True)
trade_type = messages.EnumField(TradeType, 3, required=True)
lots = messages.MessageField(Lot, 4, repeated=True)
limit = messages.IntegerField(5)
order = Order(symbol='GOOG',
total_quantity=10,
trade_type=TradeType.BUY)
lot1 = Lot(price=304,
quantity=7)
lot2 = Lot(price=305,
quantity=3)
order.lots = [lot1, lot2]
# Now object is initialized!
order.check_initialized()
Costruttore
Il costruttore della classe Message è definito come segue:
- class Message(**kwargs)
-
Inizializza lo stato dei messaggi interni.
Un'applicazione inizializza un messaggio tramite il costruttore passando gli argomenti delle parole chiave corrispondenti ai classi di campo. Ad esempio:
class Date(Message)
day = IntegerField(1)
month = IntegerField(2)
year = IntegerField(3)
Dopo aver definito il campo della classe, puoi richiamare in modo conciso i valori dei campi. Le seguenti due invocazioni sono equivalenti:
date = Date(day=6, month=6, year=1911)
È equivalente a:
date = Date()
date.day = 6
date.month = 6
date.year = 1911
Metodi di classe
La classe Message fornisce i seguenti metodi di classe:
- all_fields()
- Ottiene tutti gli oggetti di definizione dei campi. Restituisce un iteratore su tutti i valori in ordine arbitrario.
- field_by_name(name)
- Ottiene i campi per nome. Restituisce un oggetto Field associato al nome.
- Genera un'eccezione KeyError se non viene trovato alcun campo con quel nome.
- field_by_number(number)
- Ottiene un campo per numero. Restituisce l'oggetto del campo associato a quel numero.
- Genera un KeyError se non viene trovato alcun campo con quel numero.
Metodi istanza
Le istanze di messaggio hanno i seguenti metodi:
- check_initialized()
- Verifica che tutti i campi obbligatori siano inizializzati.
- Genera un errore di convalida se l'oggetto Message non è inizializzato.
- get_assigned_value(name)
- Restituisce il valore assegnato di un attributo. Se il valore non è impostato, restituisce None.
- Argomenti:
- name
- Nome dell'attributo da recuperare.
Restituisce il valore assegnato di un attributo o None se l'attributo non ha un valore assegnato.
- is_initialized(name)
- Ottiene lo stato di inizializzazione dell'oggetto Message. Restituisce
True
se il messaggio è valido, altrimenti False
.
- reset(name)
- Ripristina il valore assegnato per un campo, che restabilisce il valore predefinito o, se non è presente alcun valore predefinito, Nessuno.
- Argomenti:
- name
- Nome del campo da reimpostare.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-09-04 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 UTC."],[[["\u003cp\u003eThe \u003ccode\u003eMessage\u003c/code\u003e class defines structured messages for efficient data transmission across networks or processes, using field attributes, other \u003ccode\u003eMessage\u003c/code\u003e definitions, and \u003ccode\u003eEnum\u003c/code\u003e types.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eMessage\u003c/code\u003e objects must have all required fields populated and nested messages initialized to be considered valid, which can be checked with \u003ccode\u003echeck_initialized\u003c/code\u003e or \u003ccode\u003eis_initialized\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eMessage\u003c/code\u003e objects are validated upon creation and population, and assigning an invalid value will raise a \u003ccode\u003eValidationError\u003c/code\u003e, while the \u003ccode\u003evalidate()\u003c/code\u003e method can check value compatibility with a field.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eMessage\u003c/code\u003e constructor accepts keyword arguments corresponding to field classes, and values can be assigned directly during object creation or afterward, with the constructor supporting both methods.\u003c/p\u003e\n"],["\u003cp\u003eThe Message class offers class methods like \u003ccode\u003eall_fields\u003c/code\u003e, \u003ccode\u003efield_by_name\u003c/code\u003e, \u003ccode\u003efield_by_number\u003c/code\u003e to access field information, and instance methods such as \u003ccode\u003eget_assigned_value\u003c/code\u003e, and \u003ccode\u003ereset\u003c/code\u003e for handling field values.\u003c/p\u003e\n"]]],[],null,["# The Message Class\n\nThe Message class is used to define messages for efficient transmission across network or process space. Messages are defined using [field classes](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclasses).\n\n`Message` is provided by the `protorpc.messages` module.\n\nIntroduction\n------------\n\nMessages are more restricted than normal classes in that they may only contain field attributes and other Message and Enum definitions.\nThese restrictions are in place because the structure of the Message class itself is intended to be transmitted across network or process space and used directly by clients or even other servers.\nAs such, methods and non-field attributes cannot be transmitted with structural information, which causes discrepancies between different languages and implementations.\n\n### Initialization and Validation\n\nA Message object is considered to be initialized if it has all required fields and any nested messages are also initialized.\n\nCalling 'check_initialized' will raise a ValidationError if it is not initialized; 'is_initialized' returns a boolean value indicating if it is valid.\n\nGoogle Protocol RPC validates Message objects automatically when they are created and populated.\nYour application can validate whether a given value is compatible with a field that it is assigned to using the Field instance's [validate()](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclass#validate) method. When used on a message, this method checks that all values of a message and its sub-messages are valid. Assigning an invalid value to a field raises a [ValidationError](/appengine/docs/legacy/standard/python/tools/protorpc/messages/exceptions#ValidationError).\n\nThe following example creates and initializes Message objects in a fictitious stock trading application. \n\n```python\nfrom protorpc import messages\n\n# Trade type.\nclass TradeType(messages.Enum):\n BUY = 1\n SELL = 2\n SHORT = 3\n CALL = 4\n\nclass Lot(messages.Message):\n price = messages.IntegerField(1, required=True)\n quantity = messages.IntegerField(2, required=True)\n\nclass Order(messages.Message):\n symbol = messages.StringField(1, required=True)\n total_quantity = messages.IntegerField(2, required=True)\n trade_type = messages.EnumField(TradeType, 3, required=True)\n lots = messages.MessageField(Lot, 4, repeated=True)\n limit = messages.IntegerField(5)\n\norder = Order(symbol='GOOG',\n total_quantity=10,\n trade_type=TradeType.BUY)\n\nlot1 = Lot(price=304,\n quantity=7)\n\nlot2 = Lot(price=305,\n quantity=3)\n\norder.lots = [lot1, lot2]\n\n# Now object is initialized!\norder.check_initialized()\n```\n\nConstructor\n-----------\n\nThe constructor of the Message class is defined as follows:\n\nclass Message(\\*\\*kwargs)\n\n: Initialize the internal messages state.\n\n An application initializes a message via the constructor by passing in keyword arguments corresponding to [field classes](/appengine/docs/legacy/standard/python/tools/protorpc/messages/fieldclasses). For example: \n\n ```python\n class Date(Message)\n day = IntegerField(1)\n month = IntegerField(2)\n year = IntegerField(3)\n ```\n\n After defining the class field, you can concisely invoke field values. The following two invocations are equivalent: \n\n ```python\n date = Date(day=6, month=6, year=1911)\n ```\n\n Is equivalent to: \n\n ```python\n date = Date()\n date.day = 6\n date.month = 6\n date.year = 1911\n ```\n\nClass Methods\n-------------\n\nThe Message class provides the following class methods:\n\nall_fields()\n: Gets all field definition objects. Returns an iterator over all values in arbitrary order.\n\nfield_by_name(name)\n: Gets fields by name. Returns a Field object associated with the name.\n: Raises a [KeyError](http://wiki.python.org/moin/KeyError) if no field by that name is found.\n\nfield_by_number(number)\n: Gets a field by number. Returns the field object associated with that number.\n: Raises a [KeyError](http://wiki.python.org/moin/KeyError) if no field by that number is found.\n\nInstance Methods\n----------------\n\nMessage instances have the following methods:\n\ncheck_initialized()\n: Checks that all required fields are initialized.\n: Raises a [ValidationError](/appengine/docs/legacy/standard/python/tools/protorpc/messages/exceptions#ValidationError) if the Message object is not initialized.\n\nget_assigned_value(name)\n: Gets the assigned value of an attribute. If the value is unset, returns None.\n: Arguments:\n\n name\n : Name of the attribute to get.\n\n Returns the assigned value of an attribute, or None if the attribute has no assigned value.\n\nis_initialized(name)\n: Gets the initialization status for the Message object. Returns `True` if the message is valid, else `False`.\n\nreset(name)\n: Resets the assigned value for a field, which re-establishes the default value or, if there is no default value, None.\n: Arguments:\n\n name\n : Name of the field to reset."]]