在python的世界中一切皆对象,所有的子类都是继承自同一个父类,object
那object 到底是什么呢?

来看源码定义

typedef struct _object {_PyObject_HEAD_EXTRAPy_ssize_t ob_refcnt;struct _typeobject *ob_type;
} PyObject;

这个object 其实就是一个结构体,Py_ssize_t ob_refcnt; 记录了 某个对象被引用的次数 python 通过 #define Py_INCREF(op) 宏来增加引用计数, 通过#define Py_DECREF(op) 宏来减少引用计数, 对象初始化时使用 #define _Py_NewReference(op) 宏来初始化引用计数为 1。当该计数等于 0 时 就会被垃圾回收器回收
struct _typeobject *ob_type; 记录了该对象的类型
_PyObject_HEAD_EXTRA 官方的注释是 /* Define pointers to support a doubly-linked list of all live heap objects. */ 为所有在堆上存活的对象定义的支持双向链接的指针

因此这个object 构成了所有python对象的基石, 所有的对象都会有 引用计数 和 对象类型
这两个特征, 但是其他对象由于各自不同,因此还会有自己的属性。

struct _typeobject 这个结构体还定义了
const char *tp_name;该类型的名称
Py_ssize_t tp_basicsize, tp_itemsize; 创建类型时分配的内存大小
等诸多关于类型创建对象所用到的函数指针,在对象创建初始化时,根据对象类型的不同可以指定不同的对象支持的不同操作,这正是一个对象区别于另外一个对象的原因

例如,如果创建的对象是 int 对象
那么它就需要用到该函数指针 PyNumberMethods *tp_as_number; 定义该int 对象支持的操作方法
如果该对象是字典类型
那么初始化时就需要用到该函数指针PyMappingMethods as_mapping; 定义了字典对象应该支持的方法

object 源码地址: https://github.com/python/cpython/blob/master/Include/object.h,
https://github.com/python/cpython/blob/master/Objects/object.c

python 源码解析 object 定义的介绍相关推荐

  1. Python源码解析:内存管理(DEBUG模式)的几个理解点

    写了这多贴子,顺带写点自己的感想吧!其实很多贴子在写的时候很踌躇,比如这次打算写的python内存管理,因为内存管理都比较琐碎,在软件架构里,也是很容易出问题的地方,涉及的细节内容非常多,要写好写明白 ...

  2. JDK源码解析——Object的hashCode方法

    目录 前言 说明 一.源码目录结构 (1).JDK目录 (2).hotspot目录 二.基础知识 (1).Object Header(对象头) (2).Lock(锁) 1. 无锁 => 偏向锁 ...

  3. Python源码解析-整数与引用计数器

    文章目录 简介 PyLongObject 大小整数 大小整数的区分 小整数池初始化 整数对象的创建 计数回收机制 本文基于Python3.10.4. 简介 在Python源码中,整数这个概念是通过Py ...

  4. JDK源码解析--Object类

    作为一名java开发,肯定会知道object类,object类是所有类的基类,当一个类没有直接继承任何类时,默认继承object类,所以也被称之为"上帝类". 目录 一.继承Obj ...

  5. spring源码解析bean定义五ContextNamespaceHandler一

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本文转自"天河聊技术"微信公众号 本次介绍ContextNamespaceHandler的prope ...

  6. Vue2源码解析 Object变化监听

    目录 1 什么是变化监听 2 如何跟踪变化 3  何如收集依赖 4  依赖收集在哪 5  依赖是谁 6  什么是Watcher 7  递归侦测所有key 8  关于Object的问题 9  总结 1 ...

  7. BasicGames Python 源码解析 02 Amazing

    :apachecn/python-code-anal 这个游戏会接收用户输入的长和宽,动态生成一个迷宫. 改进自 Frank Palazzolo 的版本. 导入 import random impor ...

  8. BasicGames Python 源码解析 01 AceyDucey

    :apachecn/python-code-anal 导入 import random cards # 定义卡牌面值和名称的映射 cards = {1: "1",2: " ...

  9. python 源码解析

    http://blog.donews.com/lemur/archive/category/cpython%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/ 转载于:https ...

最新文章

  1. Python 开发者节省时间的 10 个小技巧
  2. tmux的使用方法和个性化配置
  3. 两个onCreate方法?你真的了解onCreate()么?
  4. 2021-03-12 Python基础核心概念 变量和简单数据类型
  5. Java多线程-线程状态
  6. java set的first_Java TreeSet pollFirst()方法与示例
  7. 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
  8. poj 1251 Jungle Roads
  9. Windows Server 2016 RTM AVMA Keys
  10. android excel加图片,安卓和iOS版的Excel现在可以拍摄图片上的表格转为电子表格
  11. MySQL数据库中存储引擎和数据类型
  12. html项目符号正方形,html 项目符号
  13. Unity篇——Minimap小地图
  14. Spring cloud config 配置文件加密
  15. Word如何让不同页显示不同的页码,页眉
  16. Elasticsearch 7.X data stream 深入详解
  17. 建议收藏!这10个学习编程的小技巧,万人点赞!
  18. 安全狗发布网站后门查杀引擎“啸天”变形网马无处可匿
  19. 《资本论》读书笔记(2)第二卷第一章:资本形态变化及其循环
  20. linux+gunzip解压命令,Linux中的Gunzip命令详解

热门文章

  1. HCIE华为云计算面试-虚拟化
  2. 黑白琴键 java_【琴键巧记】记住钢琴的88个键,其实很简单!
  3. nginx离线部署以及安装包
  4. MyEclipse 2016 CI 安装教程及最详细的破解教程(内附有正版安装包及破解工具)
  5. 阿里国际站的评论可以删除吗?要如何运营?
  6. 月光女神 中英文对照
  7. 纯html各种心理性格测试网站
  8. 万魔双十一预售开启,抢付尾款免定金!新品超低价!
  9. Python实现简单的棋盘
  10. 聚类分析在用户行为中的实例_如何对用户进行聚类分析?