Python 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"

我有一个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")
我将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()
。但这样做违背了其中一个的目的。有没有其他方法可以做到这一点