A classe Message
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
A classe Message é usada para definir mensagens para transmissão eficiente em espaços de rede ou processo. As mensagens são definidas por classes de campo.
Message
é fornecido pelo módulo protorpc.messages
.
Introdução
As mensagens são classes mais restritas que o normal porque só contêm atributos de campo e outras definições de Mensagem e Enum.
Essas restrições estão em vigor porque a estrutura da classe Message é transmitida por meio da rede ou do espaço do processo e usada diretamente pelos clientes ou até mesmo por outros servidores.
Assim, métodos e atributos que não são de campo não podem ser transmitidos com informações estruturais, causando discrepâncias entre diferentes linguagens e implementações.
Inicialização e validação
Um objeto Message é considerado inicializado se tiver todos os campos obrigatórios e se mensagens aninhadas também tiverem sido inicializadas.
Um ValidationError será gerado para a chamada "check_initialized" em caso de não inicialização. Um valor booleano que indica a validade da chamada é retornado por "is_initialized".
Os objetos Message são validados automaticamente pelo protocolo de RPC do Google quando são criados e preenchidos.
Com o método validate() da instância de Field, é possível que o aplicativo verifique se determinado valor é compatível com o campo a que foi atribuído. Quando usado em uma mensagem, o método verifica se todos os valores de uma mensagem e das respectivas submensagens são válidos. A atribuição de um valor inválido a um campo causa um ValidationError.
O exemplo a seguir cria e inicializa objetos Message em um aplicativo fictício de comércio de ações.
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()
Construtor
O construtor da classe Message é definido assim:
- class Message(**kwargs)
-
Inicializa o estado interno de mensagens.
A mensagem é iniciada pelo aplicativo por meio do construtor, com a transmissão dos argumentos da palavra-chave correspondentes às classes de campo. Por exemplo:
class Date(Message)
day = IntegerField(1)
month = IntegerField(2)
year = IntegerField(3)
Após definir o campo da classe, invoque valores de campo de forma concisa. As duas invocações a seguir são equivalentes:
date = Date(day=6, month=6, year=1911)
É equivalente a:
date = Date()
date.day = 6
date.month = 6
date.year = 1911
Métodos de classe
A classe Message fornece os seguintes métodos de classe:
- all_fields()
- Consegue todos os objetos de definição de campo. Retorna um iterador sobre todos os valores em ordem arbitrária.
- field_by_name(name)
- Recebe os campos por nome. Retorna um objeto Field associado ao nome.
- Um KeyError é gerado se nenhum campo com esse nome for encontrado.
- field_by_number(number)
- Recebe o campo por número. Retorna o objeto de campo associado a esse número.
- Um KeyError é gerado se nenhum campo com esse número for encontrado.
Métodos da instância
As instâncias de mensagem têm os seguintes métodos:
- check_initialized()
- Verifica se todos os campos obrigatórios foram inicializados.
- Um ValidationError é gerado se o objeto Message não for inicializado.
- get_assigned_value(name)
- Recebe o valor atribuído de um atributo. Se o valor não estiver definido, retorna None.
- Argumentos:
- name
- Nome do atributo a ser recebido.
Retorna o valor atribuído do atributo ou None, se o atributo não tiver um valor atribuído.
- is_initialized(name)
- Recebe o status de inicialização do objeto Message. Retorna
True
, se a mensagem for válida, ou False
.
- reset(name)
- Redefine o valor atribuído a um campo, restabelecendo o valor padrão ou, se não houver valor padrão, None.
- Argumentos:
- name
- Nome do campo a ser redefinido.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-09-04 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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."]]