Ich möchte alle Feldnamen eines Proto in eine Liste aufnehmen. Gibt es eine Möglichkeit, dies zu tun? Ich habe in die Dokumentation geschaut und da scheint nichts zu sein.
Jede Proto-Klasse besitzt eine DESCRIPTOR-Klasse Variable , mit der die Felder der entsprechenden Protobuf-Nachrichten überprüft werden können.
Sehen Sie sich die Dokumentation des Deskriptors und FieldDescriptor Klassen für weitere Details .
Hier ist ein einfaches Beispiel, um die Namen aller Felder in message
in eine Liste zu bekommen:
qfiards Antwort funktionierte nicht für mich. Aufruf von message.DESCRIPTOR.fields.keys()
produced AttributeError: 'list' object has no attribute 'keys'
.
Nicht sicher, warum es nicht funktionieren würde. Vielleicht hat es etwas damit zu tun, wie die Nachricht definiert / kompiliert wurde.
Die Problemumgehung bestand darin, eine Listenzusammensetzung der einzelnen Feldobjekte zu erstellen und die name
-Eigenschaft für jede zu erhalten. Dies gab mir eine Liste von Strings aller Felder in dieser Liste.
Beachten Sie, dass Sie dadurch die Feldnamen in diesen Feldern nicht rekursiv erhalten.
Tags und Links python protocol-buffers