学过java语言的童鞋都知道,java是一门面向对象语言,其基本思想就是一切皆对象。Python也是同样的,甚至Python将面向对象思想贯彻地更加完全,由于在Python中,class自己是一个对象,class实例化出来的实例也是对象,方法函数是一个对象,甚至代码模块都是一个对象,这是java未曾拥有的。java
对象的一个重要特性就是能够被赋值给其余变量,咱们说方法、函数、类都是对象,那么,固然也具备这一特性:app
In [1]:函数
In [2]:ui
甚至函数内部还能够将函数做为返回值,注意这一特性很是重要,由于这是Python装饰器的基础:spa
In [20]:3d
In [22]:对象
Out[22]:blog
再来看看类的赋值:继承
In [17]:element
In [4]:
In [5]:
Out[5]:
咱们还能够继续讲类和函数放进一个list中:
In [6]:
In [7]:
In [8]:
Out[8]:
可见,类和函数方法都是对象。
在上文中咱们说过,Python中一切皆对象,class也不例外,而class就是用来生成object的对象,那么,既然class也是一个对象,它又是谁生成的呢?没错,就是type,能够这么认为,type就是用来生成class(类)的一种对象。
咱们知道,Python中有一个type()方法,能够查看传递的实例是有哪一个类生成的:
能够看到,type(p)指向的是一个Person类。那么,若是咱们对Person类使用type()呢?
返回的是一个type,那么,咱们能够认为,type是生成Person类的类。type这个类对象自己又是由谁生成的呢?
可知,type对象也是由type自己生成的。因此,type是最顶层的类,一切类对象都是由type生成。
对象和类是两种不一样的概念,对象是一个具体的概念,是类这个模板生成出来的。在Python中,类既拥有做为一个对象的特性,也有用对象的特性,咱们能够认为,Python类中所拥有的对象的特性是由type所生成、赋予的。那么,Python类所拥有的做为一个类的特性是谁赋予的呢?
那就是object。
在java中,任何一个没有明确指明继承关系的类,都继承object类,在Python中也不例外:
调用类的 base 属性能够查看父类:
在定义Person类时,咱们没有指明继承关系,因此,默认就继承自object类。除了自定义的类外,Python的内置类型也同样继承自object:
可知,object没有父类。
继续,object类是否是对象呢?确定是,由于Python无处不对象,那么,object是哪一个类实例化生成的呢?
可见,object是由type这个类生成的。type也是一个类,它的父类是什么呢?
这里有点绕,type类实例化了object,type类由继承自object,这不矛盾。不管是type,仍是object,它们便是对象,也是类,因此既拥有对象的特性,也拥有类的特性。刚说过,type掌管了对象的特性,object掌管了类的特性,因此二者相互依存。咱们 用一幅图来讲明,以下图所示,虚线表示对象实例化生成关系,实线表示类的继承关系。全部类都拥有对象的特信息,因此都由type实例化生成,全部对象都拥有类的特性,因此都继承自object。
此文转载文,著做权归做者全部,若有侵权联系小编删除!
原文地址:https://www.tuicool.com/articles/zyAV7vr
须要源代码或者想了解更多的(点击这里查看)