类,对象,实例
之前一直将对象和实例区分不清楚,最近思考了下,整理如下
类—实例化—>对象
实例是相对于某一个具体类的概念,a对象是B类的实例。
类是对象的集合(抽象)
类实例化为对象,因此所谓的实例是相对类而言的,并不能说tom是实例,而是tom是Student类的实例。
但我们可以说tom是一个对象。
为什么说python中一切皆对象
函数是function类的实例化对象
>>> def fun1():
... pass
...
>>> type(fun1)
<class 'function'>
>>> type(type(fun1))
<class 'type'>
通过type(fun1)可以看出,函数是function类的实例,而function类又是type元类的实例。
所以从这个角度看,函数也是类的实例,也是对象,因此某种意义上可以说,除了type元类以外,一切皆对象。
甚至包括import 一个模块,这个模块都是一个module类的一个实例,比如一个自建的models模块
>>> type(models)
<class 'module'>
以此推断,其实python package被导入后,在运行时也是一个对象,以test_app包为例:
>>> import test_app
>>> type(test_app)
<class 'module'>
>>> for i in test_app.__dict__:
... print(i)
...
__name__
__doc__
__package__
__loader__
__spec__
__path__
__file__
__cached__
__builtins__
apps
models
admin
可以看到,test_app包也是一个module类的实例对象,或许python包要求__init__文件,也就是包在初始化为对象时首先执行的,有点像类的实例方法__init__。