Python判断变量类型的两个内置函数type()和isinstance()

Python中判断对象类型可以用内置函数type()

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> type([]) is list
True
>>> type({}) is dict
True
>>> type('') is str
True
>>> type(0) is int
True
>>> type([])
<class 'list'>
>>> type({})
<class 'dict'>
>>>

type()函数也可以用在自定义的类型上,但是只能得到其本身类型,无法得知其继承自什么类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
class A:
pass
class B(A):
pass
>>> a = A()
>>> b = B()
>>> type(a) is A
True
>>> type(b) is B
True
>>>

但是,判断子类B的实例b是否是父类A类型时,则是False:

1
2
3
>>> type(b) is A
False
>>>

为了解决这个问题,需要使用isinstance()内置函数,用来判断对象是否是类的实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> isinstance(b, A)
True
>>> isinstance(b, B)
True
>>> isinstance(a, A)
True
>>> isinstance(a, B)
False
>>> isinstance([], list)
True
>>> isinstance({}, dict)
True
>>> isinstance(0, int)
True
>>>

因此,通常情况下,判断对象类型用isinstance()是更好的选择,相比type(),它能得到对象继承自什么类型。
而且,isinstance()函数中的类型参数还可以是元组,以便检测对象是否是多个类型中的一种。

1
2
3
4
5
6
7
>>> isinstance([], (tuple, list, dict))
True
>>> isinstance((), (tuple, list, dict))
True
>>> isinstance({}, (tuple, list, dict))
True
>>>

大师兄 wechat
欢迎关注我的微信公众号:Python大师兄