我有一个从另一个模块接收对象的情况。对象类型可以是JSON String, dict或Google Protobuf。我可以在python中使用isinstance来确定它是JSON字符串还是字典,但发现很难使用isinstance
来检查它是否是protobuf
。我甚至不确定isinstance
是否可以用于非基本类型,如Google Protobuf。
所以,有没有一种方法来检查给定的对象是谷歌Protobuf类型在Python?
您正在接收Protobuf对象或序列化(二进制)字符串吗?
如果你正在接收对象,那么这些应该是Message和isinstance
的子类,使用object
为Message
应该为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的东西都是原型。