怎么查看一个对象的类型

anonymity
Lepaskan: 2019-05-25 15:10:48
asal
4245 orang telah melayarinya

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

怎么查看一个对象的类型

使用type()

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

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

>>> type(123)
<type &#39;int&#39;>
>>> type(&#39;str&#39;)
<type &#39;str&#39;>
>>> type(None)
<type &#39;NoneType&#39;>
Salin selepas log masuk

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

>>> type(abs)
<type &#39;builtin_function_or_method&#39;>
>>> type(a)
<class &#39;__main__.Animal&#39;>
Salin selepas log masuk

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

使用isinstance()

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

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

object -> Animal -> Dog -> Husky
Salin selepas log masuk

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

>>> a = Animal()
>>> d = Dog()
>>> h = Husky()
Salin selepas log masuk

然后,判断:

>>> isinstance(h, Husky)
True
Salin selepas log masuk

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

再判断:

>>> isinstance(h, Dog)
True
Salin selepas log masuk

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

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

>>> isinstance(h, Animal)
True
Salin selepas log masuk

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

>>> isinstance(d, Dog) and isinstance(d, Animal)
True
Salin selepas log masuk

但是,d不是Husky类型:

>>> isinstance(d, Husky)
False
Salin selepas log masuk

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

>>> isinstance(&#39;a&#39;, str)
True
>>> isinstance(u&#39;a&#39;, unicode)
True
>>> isinstance(&#39;a&#39;, unicode)
False
Salin selepas log masuk

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

>>> isinstance(&#39;a&#39;, (str, unicode))
True
>>> isinstance(u&#39;a&#39;, (str, unicode))
True
Salin selepas log masuk

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

>>> isinstance(u&#39;a&#39;, basestring)
True
Salin selepas log masuk

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

Atas ialah kandungan terperinci 怎么查看一个对象的类型. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan