Python type 与 __bases__
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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__的主要内容,如果未能解决你的问题,请参考以下文章