如何以编程方式查找对象类型是否为Google Protobuf?



我有一个从另一个模块接收对象的情况。对象类型可以是JSON String, dict或Google Protobuf。我可以在python中使用isinstance来确定它是JSON字符串还是字典,但发现很难使用isinstance来检查它是否是protobuf。我甚至不确定isinstance是否可以用于非基本类型,如Google Protobuf。

所以,有没有一种方法来检查给定的对象是谷歌Protobuf类型在Python?

您正在接收Protobuf对象或序列化(二进制)字符串吗?

如果你正在接收对象,那么这些应该是Message和isinstance的子类,使用objectMessage应该为protobufs。

如果传入对象是o和:

assert isinstance(json.loads(o), dict)
assert isinstance(o, dict)
from google.protobuf.message import Message
assert isinstance(o, Message)
assert issubclass(o, Message)

尽管测试每种类型(JSON, dict, proto)要花更多的精力,但我认为在继续之前最好先确认对象的类型。

你可以通过只测试直到找到匹配来缩短测试,但你想避免将来添加一些第四种类型,并且你的代码假设任何不是JSON或dict的东西都是原型。

相关内容

最新更新