Python Protobuf带有枚举编码的字段之一
我有一个Protobuf定义如下:Python Protobuf带有枚举编码的字段之一,python,json,enums,type-conversion,protocol-buffers,Python,Json,Enums,Type Conversion,Protocol Buffers,我有一个Protobuf定义如下: MyMessage { oneof my_oneof { EnumA a = 1; EnumB b = 2; } } enum EnumA { ENUMA_UNSPECIFIED = 0; FOO = 1; BAR = 2; } enum EnumB { ENUMB_UNSPECIFIED = 0; FOOB = 1; BARB = 2; } MyMessage test; test.a = EnumA.Value("FOO"
MyMessage {
oneof my_oneof {
EnumA a = 1;
EnumB b = 2;
}
}
enum EnumA {
ENUMA_UNSPECIFIED = 0;
FOO = 1;
BAR = 2;
}
enum EnumB {
ENUMB_UNSPECIFIED = 0;
FOOB = 1;
BARB = 2;
}
MyMessage test;
test.a = EnumA.Value("FOO")
我将proto消息的a
字段设置如下:
MyMessage {
oneof my_oneof {
EnumA a = 1;
EnumB b = 2;
}
}
enum EnumA {
ENUMA_UNSPECIFIED = 0;
FOO = 1;
BAR = 2;
}
enum EnumB {
ENUMB_UNSPECIFIED = 0;
FOOB = 1;
BARB = 2;
}
MyMessage test;
test.a = EnumA.Value("FOO")
我想读取test.a并将其与从json字符串读取的值进行比较:
{'message_enumA': "FOO"}
所以,我想做:
import json
json_dict = json.load({'message_enumA': "FOO"})
getattr(test, test.WhichOneof("my_oneof")) in json_dict.values()
上述代码返回False
,因为getattr
返回与EnumA
中的枚举对应的整数1
。我无法执行test.a=EnumA.Name(1)
,因为a
在内部定义为int字段
当然,我可以将getattr(…)
调用包装成EnumA.Name()
。但这样做违背了其中一个的目的。有没有其他方法可以做到这一点