怎么查看一个对象的类型


本文摘自php中文网,作者anonymity,侵删。

在Python中有两种类型判断函数,type()和isinstance()。

使用type()

首先,我们来判断对象类型,使用type()函数:

基本类型都可以用type()判断:

1

2

3

4

5

6

>>> type(123)

<type 'int'>

>>> type('str')

<type 'str'>

>>> type(None)

<type 'NoneType'>

如果一个变量指向函数或者类,也可以用type()判断:

1

2

3

4

>>> type(abs)

<type 'builtin_function_or_method'>

>>> type(a)

<class '__main__.Animal'>

但是type()函数返回的是什么类型呢?它返回type类型。

使用isinstance()

对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。

我们回顾上次的例子,如果继承关系是:

1

object -> Animal -> Dog -> Husky

那么,isinstance()就可以告诉我们,一个对象是否是某种类型。先创建3种类型的对象:

1

2

3

>>> a = Animal()

>>> d = Dog()

>>> h = Husky()

然后,判断:

1

2

>>> isinstance(h, Husky)

True

没有问题,因为h变量指向的就是Husky对象。

再判断:

1

2

>>> isinstance(h, Dog)

True

h虽然自身是Husky类型,但由于Husky是从Dog继承下来的,所以,h也还是Dog类型。换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。

因此,我们可以确信,h还是Animal类型:

1

2

>>> isinstance(h, Animal)

True

同理,实际类型是Dog的d也是Animal类型:

1

2

>>> isinstance(d, Dog) and isinstance(d, Animal)

True

但是,d不是Husky类型:

1

2

>>> isinstance(d, Husky)

False

能用type()判断的基本类型也可以用isinstance()判断:

1

2

3

4

5

6

>>> isinstance('a', str)

True

>>> isinstance(u'a', unicode)

True

>>> isinstance('a', unicode)

False

并且还可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是str或者unicode:

1

2

3

4

>>> isinstance('a', (str, unicode))

True

>>> isinstance(u'a', (str, unicode))

True

由于str和unicode都是从basestring继承下来的,所以,还可以把上面的代码简化为:

1

2

>>> isinstance(u'a', basestring)

True

既然有了type()来判断类型,为什么还有isinstance()呢?一个明显的区别是在判断子类。type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。

以上就是怎么查看一个对象的类型的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

基于Python的2d图库matplotlib的图例、标题和标签介绍

Python的注释有哪些

Python字典支持双向索引吗

Python操作sql server数据库的方法

Python变量类型-字典的实战运用与分析

Python会取代java吗

Python怎么做反爬

Python函数怎么用

Python如何给series排序

Python中列表中的pop方法与remove方法有什么区别

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...