从protobuf动态访问一个值

时间:2018-07-19 11:22:22

标签: python protocol-buffers

比方说,我定义了这样的protobuf消息

message Config {
    oneof config{
         A a = 1;
         B b = 2;
    }
}

现在在python代码中,当我解析Config的消息实例时,我可以使用

获得字段名称之一
field = config.WhichOneof('config')

但是我应该如何使用获得的字段名访问A?我不想写这样的东西:

if field == 'a':
    return config.a
else
    return config.b

因为我只想使用a或b获取下划线值,所以我已经知道它的类型。有更好的解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用getattr

data = getattr(config, config.WhichOneof('config')).value

由于WhichOneof('config')返回'a''b',因此只需使用getattr动态访问该属性。