Python进阶学习笔记(一)对象

1.对象模型

在面向对象理论中类和对象是不同的概念,而在python中类也是对象,叫做类型对象。

所以python中的类,实例对象,类型都是对象。

元类型:

在python中实例对象的类型为对应类型的对象,而类型的对象为type对象,如下代码:

from Test2 import  Test2
if __name__ == '__main__':
    s = "abc"
    extent=Test2() #Test2的实例化对象
    print(type(s),type(str),type(type))
    print(type(extent),type(Test2))
class Test2:
    print("test")

输出结果

<class 'str'> <class 'type'> <class 'type'>

<class 'Test2.Test2'> <class 'type'>

type对象是所有对象的元类型,包括它自己的元类型也是,如图,不同类型对象的类型都指向元类型:

object类型

object类型是所有类型的基类型,也就是任何一个类都默认继承object类,除了他自己。这是因为继承必须有一个终点。

如下代码:

from Test2 import  Test2
if __name__ == '__main__':
    s = "abc"
    extent=Test2() #Test2的实例化对象
    print(issubclass(Test2,object))
    print(issubclass(str, object))
    print(issubclass(type, object))

对象的引用

在python中变量只是一个名字,保存指向实际对象的指针。

不可变对像

当对不可变对象进行修改时,由于不可变对象在对象创建后的整个生命周期,其值都不可进行修改

当进行修改操作时会将会以新数值创建一个新对象,变量的指针指向新对象

输出结果

也就是说当对不可变变量对象修改时,仅仅只会改变该变量的指针,使之指向新的对象,而其他指向旧对象的变量指针不会fa。

可变对象

变量修改操作可以对原对象进行修改

如图对列表的添加操作

列表对象内部维护了一个动态数组,存储元素对象的指针,当进行增减时修改对应元素指针即可

变长对象与定长对象

对象预分配的空间大小是否固定

常见的变长对象如:整型,字符串,列表

定长对象如:浮点对象

2.对象在python内部的存在形式

python由c语言构成,对象在python中是由结构体实现的

PyObject ,对象的基石

除结构体之外第一行为宏定义,第二行为引用计数,第三行为类型指针。

引用计数实现垃圾回收,类型指针指向对象的的类型对象,类型对象描述实例对象的数据及行为。

PyVarObject,变长对象

在PyObject的基础上添加上ob_size,用于记录元素的个数

头文件准备了两个宏定义,方便其他对象的使用

#define PyObject_HEAD PyObject ob_base;

#define PyObject_VAR_HEAD PyVarObject ob_base;

例如浮点对象,通过PyObject的宏+双精度浮点数double来实现

列表对象,PyValObject的宏+动态数组来实现

其中allocated用来记录列表的总容量,ob_item,指向动态数组的指针

初始化头部的宏定义

PyObject_HEAD_INIT对定长对象的初始化,将应用计数设为1并将对象类型设置为给定类型,其中

PyVarObject_HEAD_INITPyObject_HEAD_INIT的基础上进一步设置长度字段

PyTyepObject,类型的基石

之前对象的结构已有引用次数,类型指针,以及变长对象的元素个数,但是缺少了对象的存储空间

以及此对象支持的操作。
其实上述联系通过ob_type参数来进行联系,它是类型指针,指向一个类型对象,其中的关键部分:

部分参数说明:

  • 类型名称 ,即 tp_name 字段;
  • 创建实例对象时所需的 内存信息 ,即 tp_basicsizetp_itemsize 字段;
  • 该类型支持的相关 操作信息 ,即 tp_printtp_getattr 等函数指针;

图解

由于类型对象全局唯一,可以将类型对象定义成全局变量,如PyFloatObject对应的全局变量中叫做PyFloat_Type

PyType_Type,类型的类型

在之前了解到引用对象的类型为对应的类型对象,就如上述的PyTypeObject,记录了Float类型的内存大小及支持的操作,它与PyFloat通过ob_type 进行关联。

类型对象也是有类型的,那么它也是应该通过ob_type关联的对象记录type类型的内存大小及支持的操作。如图所示:

参考资料:Python 源码深度剖析-慕课专栏 (imooc.com)

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

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

相关文章

FastAPI 的隐藏宝石:自动生成 TypeScript 客户端

在现代 Web 开发中&#xff0c;前后端分离已成为标准做法。这种架构允许前端和后端独立开发和扩展&#xff0c;但同时也带来了如何高效交互的问题。FastAPI&#xff0c;作为一个新兴的 Python Web 框架&#xff0c;提供了一个优雅的解决方案&#xff1a;自动生成客户端代码。本…

Java笔试面试题AI答之设计模式(3)

文章目录 11. Spring开发中的哪里使用了工厂设计模式 &#xff1f;1. BeanFactory2. 工厂方法模式3. 抽象工厂模式4. 示例说明总结 12. 什么是代理模式 &#xff1f;13. 请列举代理模式的应用场景 &#xff1f;14. 什么是原型模式 &#xff1f;15. 请简述Java中原型模式的使用方…

c++二叉搜索树

⼆叉搜索树的概念 ⼆叉搜索树又称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树: • 若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于等于根结点的值 • 若它的右子树不为空&#xff0c;则右子树上所有结点的值都大于等于根结…

Contact Form 7最新5.9.8版错误修复方案

最近有多位用户反应Contact Form 7最新5.9.8版的管理页面有错误如下图所示 具体错误文件的路径为wp-content\plugins\contact-form-7\admin\includes\welcome-panel.php on line 153 找到welcome-panel.php这个文件编辑它&#xff0c;将如下图选中的部分删除 删除以后&#xf…

洛谷P5740——结构体运用

简单的结构体&#xff0c;但是要注意这个排序还有求和重复 时的特判 AC代码附在后面 #include<bits/stdc.h> using namespace std; struct Node{string name;int a,b,c,sum;//语文&#xff0c;数学&#xff0c;英语 }node[1000]; bool cmp(Node a,Node b){return a.sum…

软件测试之测试用例

1. 测试用例的基本要素 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环 境、操作步骤、测试数据、预期结果等要素。 好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试 评价…

Fyne ( go跨平台GUI )中文文档- 架构 (八)完结

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

恶意Bot流量识别分析实践

1、摘要 随着互联网的发展&#xff0c;自动化工具和脚本&#xff08;Bots&#xff09;的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要&#xff0c;但恶意 Bots 可能会对网站带来负面影响&#xff0c;如爬取敏感信息、恶意注册、刷流量等。因此&am…

某建筑市场爬虫数据采集逆向分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 目标网站 aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55P2NvbXBsZXhuYW1lPSVFNiVCMCVCNA 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…

十八,Spring Boot 整合 MyBatis-Plus 的详细配置

十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置 文章目录 十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置1. MyBatis-Plus 的基本介绍2. Spring Boot 整合 MyBatis Plus 的详细配置3. Spring Boot 整合 MyBatis plus 注意事项和细节4. MyBatisx 插件的…

空栈压数 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 向一个空栈压入正整数&#xff0c;每当压入一个整数时&#xff0c;执行以下规则&#xff08;设&#xff1a;栈顶至栈底整数依次编号为 $n_1, n_2, \dots, n_x $&#xff0c;其…

SPI驱动学习六(SPI_Master驱动程序)

目录 前言一、SPI_Master驱动程序框架1. SPI传输概述1.1 数据组织方式1.2 SPI控制器数据结构 2. SPI传输函数的两种方法2.1 老方法2.2 新方法 二、如何编写SPI_Master驱动程序1. 编写设备树2. 编写驱动程序 三、SPI_Master驱动程序简单示例demo1. 使用老方法编写的SPI Master驱…

NLP 主流应用方向

主流应用 文本分类文本匹配序列标注生成式任务 应用细分 常见落地应用举例&#xff1a; 文本纠错句法分析文本翻译话者分离 本质为文本分类任务数字归一化 实现数字映射&#xff0c;提高内容可读性 如将一九九九转1999

【高分系列卫星简介——高分三号卫星(GF-3)】

高分三号卫星&#xff08;GF-3&#xff09; 高分三号&#xff08;GF-3&#xff09;是我国首颗高分辨率、C频段、多极化合成孔径雷达&#xff08;SAR&#xff09;卫星&#xff0c;由中国空间技术研究院北京空间飞行器总部设计部研制&#xff0c;并于2016年8月10日成功发射。该卫…

flash_attention简要笔记

优化效果 原来&#xff0c;attention部分的计算量和中间激活占用显存的复杂度都是 O ( N 2 ) O(N^2) O(N2) 计算量部分原来QK矩阵乘和attn_scoreV矩阵乘的计算量&#xff0c;复杂度都是 O ( N 2 ) O(N^2) O(N2)&#xff1b;中间激活因为中间有一个attn_score&#xff0c;所以复…

10.解析解方法推导线性回归——不容小觑的线性回归算法

引言 线性回归是许多复杂机器学习模型的基础。作为一种基本的机器学习方法&#xff0c;线性回归提供了清晰的思路和工具&#xff0c;通过理解其推导过程&#xff0c;可以更好地掌握机器学习的基本原理和模型设计。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.学会如…

win11永久关闭Windows Defend

# Win11 Microsoft Defender 防病毒 彻底关闭 Win11 Microsoft Defender 防病毒关闭 **WinR****——输入 gpedit.msc &#xff0c;打开本地组策略编辑器——计算机配置——管理模板——Windows组件——Microsoft Defender 防病毒——关闭 Microsoft Defender 防病毒策略——设置…

免费在线压缩pdf 压缩pdf在线免费 推荐简单好用

压缩pdf在线免费&#xff1f;在日常生活和工作学习中&#xff0c;处理PDF文件是常见任务。但有时PDF文件体积较大&#xff0c;给传输、存储和分享带来不便。因此&#xff0c;学习PDF文件压缩技巧十分必要。压缩PDF文件是指通过技术手段减小文件占用的存储空间&#xff0c;同时尽…

kafka 一步步探究消费者组与分区分配策略

本期主要聊聊kafka消费者组与分区 消费者组 & 消费者 每个消费者都需要归属每个消费者组&#xff0c;每个分区只能被消费者组中一个消费者消费 上面这段话还不够直观&#xff0c;我们举个例子来说明。 订单系统 订单消息通过 order_topic 发送,该topic 有 5个分区 结算系…

基于YOLO算法的网球运动实时分析-击球速度测量-击球次数(附源码)

这个项目通过分析视频中的网球运动员来测量他们的速度、击球速度以及击球次数。该项目使用YOLO&#xff08;You Only Look Once&#xff09;算法来检测球员和网球&#xff0c;并利用卷积神经网络&#xff08;CNNs&#xff09;来提取球场的关键点。此实战项目非常适合提升您的机…