Ho un metodo google potrebbe enpoint che devo essere in grado di restituire uno MaleResponseMessage
o uno FemaleResponseMessage
. C'è un modo per specificare che ad esempio conmetodo endpoint cloud google con più messaggi di risposta
@endpoints.method(message_types.VoidMessage, [MaleResponseMessage, FemaleResponseMessage])
V'è, naturalmente, la possibilità di dichiarare una classe di super-messaggio, per esempio, PersonResponseMessage
per avvolgere sia MaleResponseMessage
o FemaleResponseMessage
. Ma c'è qualcosa di simile allo snippet sopra?
EDIT:
Cercando di implementare la mia proposta, mi sono bloccato. L'unica cosa che i due tipi di messaggi hanno in comune è la richiesta: gli stessi campi di richiesta (con un booleano aggiuntivo female=true/false
) per PersonRequest
. MaleResponseMessage
e FemaleResponseMessage
non hanno alcun campo in comune. Quindi io sto usando un metodo endpoint, come dimostra @bossylobster, dove ho controllare
if request.female : # request.female == True
return get_female(etc, etc)
else: # request.female == False // implies male
return get_male(etc,etc)
Per la risposta, ho bisogno di qualcosa come
class PersonResponse(messages.Message):
if ??? :
item = messages.MessageField(MaleResponseMessage,1)
else:
item = messages.MessageField(FemaleResponseMessage,1)
Non sono sicuro di cosa controllare ???
per. Innanzitutto, ho pensato a isinstance
o type
. Ma come lo farei? Funzionerebbe il sotto?
class PersonResponse(messages.Message):
if type(Message()) == MaleResponseMessage :
item = messages.MessageField(MaleResponseMessage,1)
else:
item = messages.MessageField(FemaleResponseMessage,1)
Quello che mi piace della tua domanda è che sembra che tu sappia davvero le tue cose. Sei solo bloccato su questo problema. :) Ricordati di condividere la tua soluzione finale se @bossylobster o qualcun altro non è in grado di aiutarti ma ci arrivi comunque. – learner
@Katedral Pillon, stai fraintendendo cosa stanno facendo le sottoclassi di 'messages.Message'. Sono lì per voi per creare una definizione del contenitore del buffer del protocollo, in modo da poter elencare solo i campi statici, non sono consentite istruzioni "if" condizionali. – bossylobster