对象
对象,在逻辑中可以看作是一个整体的数据操作的集合
PyObject
PyObject是整个Python对象机制的核心
属性:
- ob_refcnt:在PyObject中实现了引用计数的垃圾回收模式
- ob_type:指定对象类型的类型对象
分类:
- 变长对象:除了原有的两个属性之外,还包含一个属性用于存储可变数据的长度
- 定长对象
_typeobject 类型对象
属性:
- tp_name:类型名
- tp_basicsize:分配内存空间大小
- t p_itemsize:分配内存空间大小
- tp_print:操作信息
- tp_call:类型信息
创建对象的过程
- tp_new:使用其中的类型信息创建
- tp_base:查询基类
- PyBaseObject_Type
- tp_new:
- tp_basicsize:申请内存
- tp_print:初始化对象
- PyInt_Type:初始化对象
Python的type基础类分别存储了数值对象、序列对象和关联对象,需要支持三种类型的方法集合,以便于内置的对象分别使用,而自定义类可以同时使用三种方法:
- tp_as_number -> PyNumberMethods
- tp_as_sequence -> PySequenceMethods
- tp_as_mapping -> PyMappingMehods
Python中的所有类型都是对象,而Python中所有对象都继承自type -> PyType_Type
一个整数对象及其类型的调用关系:![[Pasted image 20230318113319.png]]
Python对象的多态性
Python中所有类型对象都是通过一个通用指针PyObject来储存,在外部无法判断类型,这使Python中对象很容易完成个多态
引用计数
Python通过引用计数的方式进行垃圾回收(Python3添加了分代回收),通过判断ob_refcnt参数来判断是否需要回收
Python对象的分类
- Fundamental对象:类型对象
- type
- Numeric对象:数值对象 -> [[#Python中的整数对象]]
- integer
- float
- boolean
- Sequence对象:容纳其它对象的序列集合对象
- string
- list
- tuple
- Mapping对象:类似于C++中map的关联对象
- dict
- Internal对象:Python虚拟机在运行时内部使用的对象
- function
- code
- frame
- module
- method