一切皆对象
如上所说,python中一切皆对象,都可以找到实例化它的类(使用type函数),比如
>>> type(1)
>>> type('asd')
>>> type(list)
甚至定义的一个方法也是一个对象
>>> def a():
... print('1')
...
>>> type(a)
那么神奇的地方来了,type()方法的类是什么?
>>> type(type)
这涉及到另一个关键的概念,object,在python中是最顶层的基类。先上图:
在python中存在两种关系
父子关系(图中实线表示):形象比喻为蛇是一种爬行动物(Snake is a kind of reptile)。其中,蛇(snake)是子类,爬行动物(reptile)是父类。蛇拥有爬行动物的特征,同时,又拥有标志自己是一条蛇的特征。
类型实例关系(图中虚线表示):这种关系存在于两个对象之中,其中一个对象(实例)是另一个对象(类型)的具体实现。我有一条宠物蛇叫Squasher,那么Squasher就是蛇的一个实例。英文描述为:"Squasher is an instance of snake".
我们都说面向对象,面向对象,对象(object)到底是什么?对象是python的重要核心之一:它是某个实体的抽象描述。对象具有以下特征:身份:即内存地址,可用id()函数查询
类型:如对象为int,str,list类型等
值:比如1,‘12’,[1,2,3]
注意:因为一切皆对象,所以数字2是一个对象,它的类型int也是一个对象,是type的对象,如图所示,那type又是谁的对象?没错,是自己的对象。
有了对象的概念,我们对object和type进行测试
>>> object
>>> type
>>> type(object)
>>> object.__bases__
()
>>> type.__bases__
(,)
>>>object和type是python中的两个源对象,当我们尝试介绍它们是就会陷入“先有鸡还是现有蛋”难题,到底先介绍谁?事实上,它们是互相依赖对方来定义,所以它们不能分开而论。
我们先前说过type()是用来获对象的类型的。事实上,它既是一个对象,也是获取其它对象的类型的方法。
object是type的实例,但object没有父类因为它本身就是所有对象的超类
分别输出type的类型和超类。即,object是type的超类。type的类型是它自己
如果继续实验
>>> isinstance(object,object)
True
>>> isinstance(type,object)
True
可以简单理解为一切都继承object,即type也继承object。因为type和object都是type的实例,而type继承object,则两者也就是object的实例,这个关系也可以应用在其他对象中。比如
>>> isinstance(1,object)
True
>>> isinstance('123',object)
True
PS:第一次整理笔记,逻辑混乱,权当尝试