python对象 —— 内建对象

发布时间 2023-07-15 02:28:13作者: lwxc

对象

对象,在逻辑中可以看作是一个整体的数据操作的集合

PyObject

PyObject是整个Python对象机制的核心

属性:

  • ob_refcnt:在PyObject中实现了引用计数的垃圾回收模式
  • ob_type:指定对象类型的类型对象

分类:

  • 变长对象:除了原有的两个属性之外,还包含一个属性用于存储可变数据的长度
  • 定长对象

_typeobject 类型对象

属性:

  • tp_name:类型名
  • tp_basicsize:分配内存空间大小
  • t p_itemsize:分配内存空间大小
  • tp_print:操作信息
  • tp_call:类型信息

创建对象的过程

  1. tp_new:使用其中的类型信息创建
  2. tp_base:查询基类
  3. PyBaseObject_Type
  4. tp_new:
  5. tp_basicsize:申请内存
  6. tp_print:初始化对象
  7. 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