Python で Google Protobuf の任意のフィールドの値を取得する方法2023年02月18日 13時40分36秒

Google Protobuf はネットワークプロトコルの一種。言語やハードウェア非依存で相互通信出来るように作られている。

Python で構造体の中の任意を値を取得出来る方法を探していたのだが、かなり見付けづらかった。規約書を特に、get や Field を含む関数名を探していたのだが、まさか Python の組み込み関数と同じ名前の getattr で実装して来るとは。

例として簡単な型を用意しよう。

message User {
    uint64 uid = 1;
    string name = 2;
}
これに普通にアクセスしようとすると、これらの変数の名前を使う。
    msg: User = ...
    print(msg.uid)
    print(msg.name)
関数等で、任意のフィールドにアクセスしようとすると、文字列を用いてアクセスしたくなる。
    msg: User = ...
    for name in ["uid", "name"]:
        field = getattr(msg, name)
        print(field)

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2023/02/18/9563701/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。