首页 > 代码库 > Python type 与 __bases__

Python type 与 __bases__

type 字面意思是类型,可以理解为模具,通过模具生成各种各样的实例。 Python中内置函数type()可以查看实例的具体类型。

什么样子的类型是type呢 ? 看看下面的例子。


 >>> type(bool)
 <type ‘type‘>

>>> type(str)
<type type>
>>> type(int)
<type type>
>>> type(list)
<type type>
>>> type(dict)
<type type>
>>> type(set)
<type type>
>>> type(type)
<type type>

 

可以发现, bool,str,int,list,dict,set都是type类型,而且这些是基本类型。

看一下这些类型的实例:

>>> type(True)
<type bool>
>>> type(False)
<type bool>
>>> type(1234)
<type str>
>>> type([1,2,3,4])
<type list>
>>> type({1,2,3,4})
<type set>
>>> type({1:a,2:b,3:c,4:d})
<type dict>

 

还有一种类型叫做class, 它也是一种模板,它的实例叫做Object。 

 

>>> class MyObjectA(object):
...     pass
... 
>>> type(MyObjectA)
<type type>

 

class 具有继承关系, 那它的子类又是什么类型呢 ?  Python中所有的class都继承object, 那object又是什么类型呢?

>>> class MyObjectSubA(MyObjectA):
...     pass
... 
>>> type(MyObjectSubA)
<type type>
>>> type(object)
<type type>

看来只要是class,类型都是type。 再看看它们的实例化的对象类型

>>> my_object_a = MyObjectA()
>>> type(my_object_a)
<class MyObjectA>
>>> my_object_sub_a = MyObjectSubA()
>>> type(my_object_sub_a)
<class MyObjectSubA>

如果一个object是谁的实例,那它的类型就是谁。

 

再来看一看__bases__,  __bases__ 也是内置函数, 用来查看class的继承关系。先看看下面多种继承的关系。 

>>> class MyObjectB(object):
...     pass
... 
>>> class MyObjectC(MyObjectA, MyObjectB):
...     pass
... 
>>> MyObjectC.__bases__
(<class MyObjectA>, <class MyObjectB>)

MyObjectC继承MyObjectA, MyObjectB. 可以看到MyObjectC的__bases__ 就是包含MyObjectA和MyObjectB的一个元组。

可以试下Python tutor 

 

MyObjectA的__bases__是object, 验证下:

MyObjectA.__bases__
(<type object>,)

那object的__base__是什么呢?

>>> object.__bases__
()

空的元组。

type的__bases__是什么呢 ?

>>> type.__bases__
(<type object>,)

object 

 

最后,我们可以整理出一幅这样的图

 

技术分享

 

 

 

Python type 与 __bases__