VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python数据类型判断常遇到的坑(3)

上面的代码输出:False

这就说明i和n的类型是不一样的,而实际上UserInt是继承自int的,所以这个判断是存在问题的,当我们对Python内建类型进行扩展的时候,type返回的结果就不够准确了。我们再看一个例子。

1
2
3
4
5
6
7
class ca:
    pass
class cb:
    pass
= ca()
= cb()
print (type(a) is type(b))

代码的输出结果: True

注意: 这个例子仅仅针对Python2.x版本, Python3.x版本中会返回Flase,不存在该问题

type比较的结果a和b的类型是一样的,结果明显是不准确的。在old-style class中,任意instance的type都是'instance'。所以绝对不能用type来判断其类型。

 

另外这个问题又与Python的思想有关,正常情况下不应该编写代码检查类型的,而应该直接假设被操作的instance具有你希望的属性,否则抛出异常。即使需要检查类型,也应该用isinstance来判断,这样你期望类型的subclass也能正常被处理(比如,一个函数需要处理Message类型,那么它应该也能处理Message的子类型MyMessage,所以应该使用isinstance(arg,Message)这样来判断而不是type(arg) == Message来判断)

 

 

结论:

 

尽量不要使用type()方法,多使用isinstance(),这样可以减少错误。


相关教程