这个事我应该不是地球上最后一个知道的吧( ╯□╰ )
前一段时间写代码中一个参数使用isinstance函数限制了数据类型为int,后来测试小姐姐来找我说输入为布尔类型时没有像预期的报参数有误~
然后我就试了下:
a='hello word'
b=1
c=True
isinstance(a,int)
False
isinstance(b,int)
True
isinstance(c,int)
True
查了查资料,isinstance()与type()的区别如下:
- type()不会认为子类是一种父类类型,不考虑继承关系。
- isinstance()会认为子类是一种父类类型,考虑继承关系。
而bool类型本质上是0或1,是int类型的一个子类,因此isinstance会认为bool类型也属于int。解决方法是可以使用type来进行类型判断:
type(b) is int
True
type(c) is int
False