PyType_Type和PyBaseObject_Type

news/2024/5/20 4:02:41/文章来源:https://blog.csdn.net/Jakob_Hu/article/details/117913750

PyType_Type和PyBaseObject_Type

  • 一. 类型的类型—PyType_Tpye(type的实体)
  • 二. 类型之基—PyBaseObject_Type(object的实体)

PyObject和PyTypeObject内容的最后指出下图中对实例对象类型对象的理解是不完全正确的,
Alt
浮点类型对象全局唯一,Python在C语言层面实现过程中将其定义为一个全局静态变量,定义于Object/floatobject.c中,命名为PyFloat_Type

PyTypeObject PyFloat_Type = {PyVarObject_HEAD_INIT(&PyType_Type, 0)"float",sizeof(PyFloatObject),0,(destructor)float_dealloc,                  /* tp_dealloc */// ...(reprfunc)float_repr,                       /* tp_repr */// ...
};
  • 第2行使用初始化ob_refcntob_type以及ob_size三个字段,PyVarObject_HEAD_INIT的定义可以参考博文1.4.3节的内容。
  • 第3行将tp_name字段初始化成类型名称"float"
  • 再往下是各种操作的函数指针

ob_type指针指向PyType_Type,这也是一个静态定义的全局变量。代表“类型的类型” 的type对象就是PyType_Type

一. 类型的类型—PyType_Tpye(type的实体)

上文中,float类型对象在底层实现过程中对应PyFloat_Type全局静态变量。Python类型是一种对象,也有自己的类型,即Python中的type。

>>> float.__class__
<class 'type'>

自定义类型也遵循同样的规则,

>>> class Foo(object):
...     pass
...
>>> Foo.__class__
<class 'type'>

在查看PyFloat_Type代码实现时,ob_type字段指向的PyType_Type就是type的实现。在Object/typeobject.c中定义,

PyTypeObject PyType_Type = {PyVarObject_HEAD_INIT(&PyType_Type, 0)"type",                                     /* tp_name */sizeof(PyHeapTypeObject),                   /* tp_basicsize */sizeof(PyMemberDef),                        /* tp_itemsize */(destructor)type_dealloc,                   /* tp_dealloc */// ...(reprfunc)type_repr,                        /* tp_repr */// ...
};
  • 内建类型和自定义类的PyTypeObject对象都是通过PyType_Type创建PyType_TypePyTypeObject的一个实例。
  • PyType_Type是类型机制中至关重要的对象,是所有类型的类型,称为元类型
  • 第2行代码处PyType_Type将自身的ob_type字段指向它自己。
>>> type.__class__
<class 'type'>
>>> type.__class__ is type
True

由此,以float为例,可以绘制一个更完善但是并不完全正确的实例对象和类型对象在内存中的关系图,
Alt

二. 类型之基—PyBaseObject_Type(object的实体)

上一节中红色标记的语句,并不完全正确是因为思考过程中忽略了object对象的存在。

object是另一个特殊的类型,是所有类型的基类。同样可以通过PyFloat_Typetp_base字段顺藤摸瓜找到。然而,在源码的第2行的PyVarObject_HEAD_INIT定义中,该字段并没有初始化,

0,                                          /* tp_base */

更进一步查找代码中PyFloat_Type出现的地方,在Object/object.c中发现如下代码,

if (PyType_Ready(&PyFloat_Type) < 0)Py_FatalError("Can't initialize float type");

创建类型对象过程中,需要PyType_Ready方法将tp_base字段初始化,具体如下

int
PyType_Ready(PyTypeObject *type)
{// ...base = type->tp_base;if (base == NULL && type != &PyBaseObject_Type) {base = type->tp_base = &PyBaseObject_Type;Py_INCREF(base);}// ...
}

PyFloat_Type中的tp_base字段初始化成PyBaseObject_Type,它就是object背后的实体,其源码定义为,

PyTypeObject PyBaseObject_Type = {PyVarObject_HEAD_INIT(&PyType_Type, 0)"object",                                   /* tp_name */sizeof(PyObject),                           /* tp_basicsize */0,                                          /* tp_itemsize */object_dealloc,                             /* tp_dealloc */// ...object_repr,                                /* tp_repr */
};
  • 源码中ob_type字段指向PyType_Type这与下方object在 Python中的测试代码相吻合,
>>> object.__class__
<class 'type'>
  • 此外,PyType_Ready函数初始化PyBaseObject_Type时,不设置tp_base字段。 因为继承链必须有一个终点,否则沿着继承链查找时会陷入死循环。
>>> print(object.__base__)
None

由此,得到了实例对象和类型对象在内存中完整的关系图。以float为例,
Alt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_803051.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源免费cms---十大主流建站的CMS系统介绍

开源免费cms建站系统哪个好&#xff08;十大主流建站的CMS系统介绍&#xff09; 动易 CMS&#xff0c;博客系统 drupal 不适合中国的企业网站建设。 joomla&#xff01; drupal适合程序员级别的人使用&#xff0c;方便做二次开发&#xff0c;可以做出任何你想要的网站&#…

网页编码_怎样查询HS编码?这个功能强大的网站一定要收藏!

说起HS编码&#xff0c;相信大家都不会陌生&#xff0c;它就是海关编码。是一部供海关、统计、进出口管理及与国际贸易有关各方共同使用的商品分类编码体系。HS编码对于从事进出口业务的企业来说&#xff0c;是入门基础&#xff0c;它可以帮助大家更快速地分类商品。大家该如何…

网页php花哨功能_科学的设计你的网站网页

在网络设计领域关于Eye-Tracking的研究十分火爆&#xff0c;但是如何把这些研究结果转变为具体可行的设计来运作依旧是个难点。以下就是一些来自于Eye-Tracking研究结果的窍门&#xff0c;可以为改进你的网站设计提供些意见&#xff1a;1.对比图像&#xff0c;文字更具吸引力与…

SharePoint 2013 新建网站集图解

原文:SharePoint 2013 新建网站集图解前言&#xff1a;接触SharePoint的人可能是越来越多&#xff0c;但是很多人一接触就很迷茫&#xff0c;在技术群里问如何新建网站集&#xff0c;这样一篇图解&#xff0c;帮助新手学习在搭建好SharePoint环境之后&#xff0c;如何创建一个网…

高并发高流量网站架构

Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&#xff0c;使得新生的网站有…

荷露叮咚wp建站系列视频课程.3WordPress功能菜单介绍

安装后的WordPress在E:\xampp\apps\wordpress\htdocs(历史版本有在E:\xampp\htdocs目录下的情况)&#xff0c;将E:\xampp\apps\wordpress\htdocs目录下的wordpress文件夹拷至E:\xampp\htdocs目录也是可以的。 常用功能&#xff08;按常规操作先后顺序&#xff09;&#xff1a; …

codeigniter 禁止ip登录_通过Nginx来实现禁止国外IP访问网站

前言&#xff1a; 先来说说为啥要写这篇文章&#xff0c;之前小编看了下nginx 的访问日志&#xff0c;发现每天有好多国外的IP地址来访问我的网站&#xff0c;并且访问的内容基本上都是恶意的。因此 我决定 禁止国外IP 来访问我的网站想要实现这个功能有很多方法&#xff0c;下…

【转载】Windows server 2008 IIS7发布asp.net mvc网站css、js脚本无法访问 问题解决

找到发布的对应站点在功能视图中找到“身份验证“双击打开 找到“匿名身份验证” 右击选择“编辑”或是在右侧操作栏中点击“编辑…” 打开对话框“编辑匿名身份验证凭据”对话框&#xff0c;选中“应用程序池标识&#xff08;P&#xff09;”选项&#xff0c;点击确定 http://…

网站指纹识别工具——WhatWeb v0.4.7发布

2019独角兽企业重金招聘Python工程师标准>>> WhatWeb是一款网站指纹识别工具&#xff0c;主要针对的问题是&#xff1a;“这个网站使用的什么技术&#xff1f;”WhatWeb可以告诉你网站搭建使用的程序&#xff0c;包括何种CMS系统、什么博客系统、Javascript库、web服…

Wordpress 网站搭建及性能监控方法详解!

前言 说到 Wordpress&#xff0c;大家往往想到的是博客&#xff0c;其实&#xff0c;如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统。并且&#xff0c;如果你有一定的技术基础稍加改动&#xff0c;就可以搭建出新闻网站、企业网站、电影网站&#xff0c;甚至是商城系…

转:大型网站架构系列:负载均衡详解(2)

一、软件负载均衡概述 硬件负载均衡性能优越&#xff0c;功能全面&#xff0c;但是价格昂贵&#xff0c;一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Nginx&#xff0c;Lvs&#xff0c;HaProxy等。本文参考大量文档&a…

SSH 网站制作之文件上传

2019独角兽企业重金招聘Python工程师标准>>> 最近学习用SSH做网页&#xff0c;遇到了文件上传的一些知识&#xff0c;下面就总结总结。 1.下面是一个文件上传的JSP页面 其中&#xff0c;表单中enctype"multipart/form-data"的意思&#xff0c;是设置表单的…

程序员面试过关必备网站,你用过几个?

对于程序员而言&#xff0c;面试所谓是人生重要的一件事情&#xff0c;在这之前&#xff0c;还是有必要刷一些编程面试题&#xff0c;为面试做好充足的准备&#xff01; 今天小编给大家分享一些面试相关网站&#xff0c;给大家面试来一波神助攻噢&#xff01; 在Reddit网站上&a…

程序员常用网站:让代码更简单

说起程序员&#xff0c;总有那么几个网站是程序员不可或缺的&#xff0c;小编办公室的程序员就常常用这几款网站&#xff0c;你用过么&#xff1f; Stack Overflow 这个网站&#xff0c;就算不常用&#xff0c;每次搜索编程相关都能看见它。当你遇到任何编程问题&#xff0c;…

找工作的网站有哪些好

2015年的时候&#xff0c;市场调查报告显示财务管理和计算机科学与技术专业的就业率最高。因此15年就会有很多人报考会计和计算机专业。据现在的市场来看&#xff0c;计算机专业的很吃香。15年报考计算机专业的相对就会比财务专业的会好很多。三顾人才是一家专业做人才招聘的平…

找工作什么网站最好

一般来说&#xff0c;程序员 比较木讷&#xff0c;很多程序员写代码很厉害&#xff0c;但是一到面试就什么都说不粗来了&#xff0c;即使说粗来了 &#xff0c;面试官也没有了解到你那非常牛掰的技术水平。最后应聘不上也是自然的。 三顾人才根据自己在人才市场的经验&#xff…

找工作有哪些网站?

很多人都在找工作上花了近两个月的时间&#xff0c;效率低。但是也有人在一个星期之内就找到工作的。那么如何高效精准的找工作? 1.首先要分析自己的性格特点和能力的优劣势(劣势有时比优势多考虑&#xff0c;可以使用SWOT或者职业锚测试等) 性格外向&#xff0c;热情洋溢&…

程序员在在哪个网站上找工作?

一、网上投简历巧用职位搜索 职位搜索功能是在招聘网站上具备的基本功能&#xff0c;也是最重要的一个功能&#xff0c;求职者可以按照职位搜索功能的提示&#xff0c;选择工作的地点&#xff0c;工作的时间&#xff0c;工资的范围&#xff0c;还有你想从事什么行业&#xff0c…

网站优化:测试网站速度的8款免费工具推荐

网站的加载速度是决定网站成败的重要因素&#xff0c;值得站长特别关注。原因很简单&#xff0c;没有人愿意为了打开一个网页而等老半天&#xff0c;换句话说&#xff0c;如果你的网站打开速度很慢&#xff0c;将流失大量的访客&#xff0c;甚至出现多米诺效应的不良影响&#…

《网站设计 开发 维护 推广 从入门到精通》—— 导读

前言 网站设计 开发 维护 推广 从入门到精通互联网信息技术彻底改变了人们的生活和工作。越来越多的企业和个人建立起网站来宣传自己。人才市场上对网页制作和网站建设人员的需求大大增加&#xff0c;但是网站建设是一项综合性技能&#xff0c;包括网站策划、网页设计和动态网站…