La clase Message
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
La clase Message se usa para definir mensajes y lograr una transmisión eficiente en la red o el espacio de los procesos. Los mensajes se definen con clases de campo.
El módulo protorpc.messages
proporciona Message
.
Introducción
Los mensajes están más restringidos que las clases normales, ya que solo pueden contener atributos de campo y otras definiciones de Message y Enum.
Estas restricciones se usan porque la estructura de la clase Message en sí misma está diseñada para transmitirse a través de una red o espacio de proceso y usarse de forma directa por los clientes o incluso otros servidores.
Por lo tanto, los métodos y los atributos que no son de campo no se pueden transmitir con información estructural, la cual causa discrepancias entre distintas implementaciones y lenguajes.
Inicialización y validación
Un objeto Message se considera inicializado si tiene todos los campos obligatorios y si además se inicializaron los mensajes anidados.
Llamar a “check_initialized” generará un ValidationError si no está inicializado; “is_initialized” muestra un valor booleano que indica si es válido.
El RPC del protocolo de Google valida los objetos Message de forma automática cuando se crean y se propagan.
Tu aplicación puede validar si un valor dado es compatible con un campo al cual se le asigna si se usa el método validate() de la instancia de Field. Cuando se usa en un mensaje, este método comprueba que todos los valores de un mensaje y sus submensajes sean válidos. Asignar un valor no válido a un campo genera un ValidationError.
En el ejemplo siguiente, se crean y luego inicializan objetos Message en una aplicación de negociación de acciones ficticia.
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()
Constructor
El constructor de la clase Message se define de la siguiente forma:
- class Message(**kwargs)
-
Inicializa el estado de los mensajes internos.
Una aplicación inicializa un mensaje con el constructor mediante el paso de argumentos de palabras clave que corresponden a clases de campo. Por ejemplo:
class Date(Message)
day = IntegerField(1)
month = IntegerField(2)
year = IntegerField(3)
Después de definir el campo de clase puedes invocar valores de campo de forma concreta. Las dos invocaciones siguientes son equivalentes:
date = Date(day=6, month=6, year=1911)
Es equivalente a:
date = Date()
date.day = 6
date.month = 6
date.year = 1911
Métodos de clase
La clase Message proporciona los siguientes métodos de clase:
- all_fields()
- Obtiene todos los objetos de definición de campos. Muestra un iterador sobre todos los valores en un orden arbitrario.
- field_by_name(name)
- Obtiene los campos por nombre. Muestra un objeto Field asociado con el nombre.
- Genera un KeyError si no se encuentra un campo con ese nombre.
- field_by_number(number)
- Obtiene un campo por nombre. Muestra el objeto de campo asociado con ese número.
- Genera un KeyError si no se encuentra un campo con ese número.
Métodos de instancia
Las instancias de Message tienen los métodos siguientes:
- check_initialized()
- Comprueba que todos los campos obligatorios se hayan inicializado.
- Genera un ValidationError si no se inicializó el objeto Message.
- get_assigned_value(name)
- Obtiene el valor asignado de un atributo. Si no se configura el valor, muestra None.
- Argumentos:
- name
- El nombre del atributo a obtener.
Muestra el valor asignado de un atributo o None si el atributo no tiene un valor asignado.
- is_initialized(name)
- Obtiene el estado de inicialización para el estado del objeto Message. Muestra
True
si el mensaje es válido; de lo contrario, muestra False
.
- reset(name)
- Restablece el valor asignado para un campo, el cual restablece el valor predeterminado o, si este no existe, el valor None.
- Argumentos:
- name
- Nombre del campo que se debe restablecer.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-04 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]