Python判断dict类型时type()与isinstance()的差异及适用场景
问题解答
判断条件的生效场景
这个条件的生效逻辑是:
isinstance(data, dict)会判断对象是否为dict类或dict任意子类的实例type(data) != dict会过滤掉对象本身就是原生dict直接实例的情况
所以只要传入的data是继承自dict的子类的实例,条件就会触发,常见场景包括:
- 传入自定义继承
dict的类的实例:
class CustomDict(dict): pass data = CustomDict() # 此时isinstance(data, dict)返回True,type(data)为CustomDict不等于dict,条件生效
- 传入Python标准库中
dict的子类实例,比如collections.defaultdict、collections.OrderedDict等。
单独使用isinstance(data, dict)是否满足需求
如果你的判断需求是只要对象兼容字典行为、包括允许dict子类的实例,那么针对普通字典(直接用{}或dict()生成的原生字典实例),单独用isinstance(data, dict)完全满足需求,普通字典会被正确判定为True。
如果你的需求是必须严格匹配原生dict类型,不接受任何dict子类的实例,那么单独用isinstance就不满足需求,此时应该用type(data) is dict做严格判断。
内容的提问来源于stack exchange,提问作者dmmpie
相关产品推荐
相关产品推荐

