Python作为动态语言,与其一切皆对象的特性是分不开的。
什么是一切皆对象,就是python中所有的东西都是对象
在python中,一般我们要看一个对象的类型都是用type
基础数据类型如int、str、list、set都是对象
>>>type(int)
<class 'type'>
>>>type(str)
<class 'type'>
>>>type(list)
<class 'type'>
>>>type(set)
<class 'type'>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
我们可以发现所有的基础数据类型都是type类型的,那根据面向对象的思想来说,int、str、list都是type类的实例。但同时int、str、list又能作为数据类实例化变量。
>>>class A:
... pass
>>>type(A)
<class 'type'>
- 1
- 2
- 3
- 4
- 5
- 6
我们发现类其实也是一种claasobj的对象
我们都知道类有继承的特性,在python中查看基类(父类)是调__bases__属性
>>>A.__bases__
(<class 'object'>,)
- 1
- 2
我们发现类A其实是默认继承object类的,那type也是一个类,那我们再看type的基类
>>>type.__bases__
(<class 'object'>,)
>>>object.__bases__
()
>>>type.__bases__
(<class 'object'>,)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
我们会发现所有的类包括type最终都是要继承object类
>>>type(object)
<class 'type'>
>>>type(type)
<class 'type'>
>>>import time
>>>type(time)
<class 'module'>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
并且object类也是type类的实例对象,就连type自己也是自己的对象。而且我们发现包其实也是一种对象,这也是为什么python的包需要一个__ini__.py的文件
总结下来:
- python中一切皆为对象,是因为一切类型都是type这个类的实例
- python中所有的类都继承object这个基类,它们既是对象,也能实例化对象
- type是类也是对象,底层是通过指针的方式实现自己实例化自己的