第二章对象模型(1)

面向对象分析与设计——对象模型 2           对象模型  对象模型包括:抽象、封装、模块化、层次结构、类型、并发和持久   2.1   对象模型的演进   OO建立在以前技术的最佳思想之上。两大趋势:小规模→大规模;高级程序设计语言;   2.1.1    程序设计语言的换代   l        第一代(1954~1985):科学和工程应用,公式计算 FORTRANⅠ 数学表达式   l    阅读详情

对象模型的概述

首先我们要始终铭记一句话:python是一门面向对象的语言! 并且面向的彻底,可以称为 一切皆对象。
这句话说起来简单,如要真正的让你论述其正确性,这就需要很深的功底去理解。

  • 列举常见的对象
    1. 例如我们常讲的类 ,它就是 对象。类的细致描述就是类型,再细致解释说就是类型对象,比如:
    a = 3  # a 是 int类型
    b = 'hello' # b 是字符串类型
    
    接着 我们通过class 关键字定义的类,也称为自定义类型对象
  1. 通过类(类型对象)实例化得到的实例化对象

    >>> int('1024')
    1024
    

这是要知道类和对象的基本概念:
在这里插入图片描述

接下来我们就要搞清楚类型和对象体系

1.对类型的初步理解:

如上所述, a = 3, a是一个整数对象(实例对象),其类型是整数类型( 类型对象 ),这里引入书中例子:

>>> a = 1
>>> type(a)
<class 'int'>
>>> isinstance(a, int)   # 此方法用于检验实例对象是否属于该类型,不懂得可以阅读官方文档进行理解
True

那么我们引出问题既然对象都有类型,那么 整数类型对象int,的类型是什么?

>>> type(int)
<class 'type'>  # 类型为type

这就是特殊的地方! 新手的认知总是知道,类的实例化是 实例化对象,但是这里, int(类型对象)的类型 还是一种类型,也就是说 type类型的实例化对象 还是一个类型对象(int)

python中我们知道有一个特殊的基类 object,是一种特殊的类型对象,其他任何类型均继承自object, 也就是说,object是所有类型的基类!

>>> issubclass(int, object)  # 此方法用于判断类的继承关系
True

再次引入书中的图像:
在这里插入图片描述
我们自己创建的对象,同样是继承自 object类:
在这里插入图片描述
我们创建的类的继承关系,依旧符合该原理:Sleuth 类型继承自 Dog类型
在这里插入图片描述

到这里我们已经知道了所有对象都有一个类型,并且统统继承自 object,这样 对象,object, type, 三者的关系变得很神秘,我们先来介绍下

type 和object 两个特殊的类型

  • 理论上讲, object是所有类型的基类,但是本质上面还是一种类型。所以它的类型必然是type!

  • 并且object是所有类型的基类,所以 理论上也是type的基类!

  • 而type是所有类型的 类型,所以它的类型必须是它自己!

  • object 自身不能拥有基类,因为继承必须有一个终点,不然变回陷入死循环。

    这些概念听起来很错乱,下面可以通过例子理解下:

>>> type(object)
<class 'type'>
>>> type(object) is type
True

>>> type(type)
<class 'type'>
>>> type(type) is type
True

>>> issubclass(type, object)  # 这个内置函数,用于检验继承关系
True
>>> type.__base__
<class 'object'>

我们在引入一张书中的图表,那么python的类型系统就介绍完善了!
在这里插入图片描述
(该图将成为后续阅读源码、探索 Python 对象模型的有力工具,像地图一样指明方向)

变量只是一个名字

python中,一切皆对象。所以变量 不过是一个与对象关联的名字!

  • 变量赋值: 就是将当前对象 与另一个名字关联。例如

    >>> a = 1
    >>> id(a)
    4302704784
    
    >>> b = a
    >>> id(b)
    4302704784
    
    

变量赋值知识拷贝指针,并不拷贝指针背后的对象,这点与C语言不同
```

可变对象与不可变对象

  • 既然python一切皆对象,那么对象也是区分的

  • 首先可变对象
    * 可变对象 在对象创建后,其值可以进行修改;
    * 举例 :例如列表,往列表里面追加元素,并不改变其对象

    >>> l = [1, 2]
    >>> l
    [1, 2]
    >>> id(l)
    4385900424
    
    >>> l.append(3)
    >>> l
    [1, 2, 3]
    >>> id(l)
    4385900424
    
      * 实际上列表对象内部维系了一个动态数组,存储元素的指针。我们在以后细致说明 ,引入书中图片
    

在这里插入图片描述

  • 不可变对象:
    * 而 不可变对象 在对象创建后的整个生命周期,其值都不可修改。
    * 举例子,整数类型是不可变对象
    在这里插入图片描述
    修改整数对象时, Python 将以新数值创建一个新对象,变量名与新对象进行绑定; 旧对象如无其他引用,将被释放!

  • 定长对象 :整数对象的大小跟其数值有关,像这样 大小不固定 的对象称为 变长对象
    通过书中例子:

>>> sys.getsizeof(1)  
28
>>> sys.getsizeof(100000000000000000)
32
>>> sys.getsizeof(100000000000000000000000000000000000000000000)
44

说明:位数固定的整数能够表示的数值范围是有限的,可能导致 溢出 。 Python 为解决这个问题,采用类似 C++ 中 大整数类 的思路实现整数对象—— 串联多个普通 32 位整数,以便支持更大的数值范围。 至于需要多少个 32 位整数,则视具体数值而定,数值不大的一个足矣,避免浪费(书中原话)

在这里插入图片描述

*	浮点数对象 float :
>>> sys.getsizeof(1.)
24
>>> sys.getsizeof(1000000000000000000000000000000000.)
24

在这里插入图片描述

  • 变长对象:
    字符串对象:
>>> sys.getsizeof('a')
50
>>> sys.getsizeof('abc')
52

总结:这就是初步的内容,理解和知道这些概念后,下节书中就会深入python源码,在C语言层面讲解这些东西的实现。

深度探索C++ 对象模型【第二章1】 1:在C++的构造函数上,往往编译器会做很多你不知道的事,就比如说构造函数的隐式转换,虽然有时候很方便,但是在某些情况下会造成一些意想不到的情况发生,explict关键词就因此而生~! 2:当编译器需要时,才会合成一个default constructor出来(默认构造函数)。被执行出来的默认构造函数只能执行编译器所需的行动,它不会满足程序本身的需要。下面讨论四种必须为class合成一个构造函数 阅读详情

相关推荐

EXCEL VBA从入门到精通 第二章:Excel VBA对象模型

介绍Excel VBA的对象模型,以及如何利用它来访问和操作Excel中的各种对象。在Excel VBA中,对象模型指的是Excel应用程序中的各种对象及其之间的关系。通过对象模型,可以对Excel中的各种对象进行访问和操作。在Excel VBA中,最顶层的对象是Excel应用程序对象,而Excel应用程序中的各种对象都是其下属的子对象。Excel VBA中的对象模型是一棵层次结构树,树的根节点是Excel应用程序对象,其下分别包含了Workbook对象、Worksheet对象、Range对象等等。

1012

(软件工程复习核心重点)第八章面向对象方法学-第三节:面向对象建模之对象模型

文章目录一:概念(1)定义(2)工具二:类图的基本符号(1)定义类A:表示B:命名规则(2)定义属性(3)定义服务三:表示关系的符号(1)关联A:定义B:关联的角色C:普通关联①:定义②:表示D:限定关联①:定义②:表示③:意义E:关联类①:定义②:表示(2)聚集(它是关联的特例)A:共享聚集B:组合聚集(3)泛化(本质就是继承)A:普通泛化①:抽象类②:具体类B:受限泛化①:定义②:约束(4)依赖和细化A:依赖关系B:细化关系 一:概念 (1)定义 对象模型表示静态的、结构化的系统的数据性质。它是对模拟客

快乐江湖的博客 1万+

国内外主流嵌入式GUI汇总

随着MCU资源增多,处理能力也强了,同时市场需求也增多了GUI功能也越来越丰富了,很多的嵌入式图形库都可以做出绚丽的界面。

m0_69914734的博客 3289

对象模型(Object Model)

对象模型(Object Model)

weixin_40026739的博客 2539

windows10下Boost的安装与初试

https://blog.youkuaiyun.com/s_lisheng/article/details/72871218 https://blog.youkuaiyun.com/yockie/article/details/8856190?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.vipsorttest&depth_1-utm_source=dis

焦露的博客 6393

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2695

对象模型

别人的笔记汇总 目录三种对象模型简单对象模型表格驱动对象模型C++对象模型c++额外成本与对象大小c++额外成本一个类的对象的内存大小包括:构造函数构造函数是否会自动生成1.包含有带默认构造函数的对象成员的类2.继承自带有默认构造函数的基类的类3.带有虚函数的类4.带有一个虚基类的类拷贝构造函数(探讨编译器的工作)定义拷贝构造函数的应用何时生成拷贝构造函数(类没有的话编译器生成)成员初始化队列(M...

yanrong1095的博客 3459

1、微软 Intune 全面指南:配置、管理与自动化

本文全面介绍了微软 Intune 的配置、管理和自动化操作,涵盖用户与设备管理、安全策略设置、跨平台应用部署、合规性监控及报告分析等内容。通过详细的操作步骤、自动化脚本示例和流程优化建议,帮助技术人员高效掌握 Intune 在混合办公环境中的实际应用,并展望其未来发展趋势。

ii567的博客 356

图说C++对象模型:对象内存布局详解

阅读目录 0.前言1.何为C++对象模型?2.文章内容简介3.理解虚函数表 3.1.多态与虚表3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型4.2.表格驱动模型4.3.非继承下的C++对象模型 5.继承下的C++对象模型 5.1.单继承5.2.多继承 6.虚继承 6.1.虚基类表解析6.2.简单虚继承6.3.虚拟菱形继承 7.一些问题解答

ShaderJoy 的兴趣技术杂货铺 2255

ArcMap|使用模型构建器将kml文件批量转图层

参考:https://www.jianshu.com/p/6de18f846024 第一步:打开模型构建器,拖入kml转图层工具 第二步:插入文件迭代器 第三步:双击“迭代文件”,选择kml所在文件夹 第四步:将“File.kml”与“KML转图层”连接,点击“输入KML文件” 第五步:双击“KML转图层”,更改输出位置,输出数据名称改为%名称% 第六步:运行模型 得到结果: ...

个人学习笔记 3600

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 85

深度探索C++对象模型 侯捷

目录 什么是C++对象模型 第一章 关于对象 1.1 C++对象模式 1.2 关键词所带来的差异 1.3 对象的差异 多态 指针的类型 第二章 构造函数语意学 2.1 Default Constructor的构造操作 2.2 拷贝构造器的构造操作 2.3 程序转化语意学 2.4 成员们的初始化队伍 第三章 Data语意学 3.1...

Zy_05_11的博客 3648

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

第二章 Excel对象模型

一、Excel对象模型简介 Application:Microsoft.Office.Interop.Excel.Application Workbook:Microsoft.Office.Interop.Excel.Workbook Worksheet:Microsoft.Office.Interop.Excel.Worksheet Range:Microsoft.Office.Interop.Excel.Range Application:可以把它理解为Excel程序进程,要使用Excel

哈利路亚的收藏夹 1524

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《深度探索C++对象模型》

文章目录第六章 执行期语意学第七章 站在对象模型的尖端 第六章 执行期语意学 第七章 站在对象模型的尖端

strdhgthbbh的博客 601

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度探索c++对象模型

第一章关于对象(Object Lessons)第二章构造函数语意学第三章data语意学第四章function语意学第五章构造、析构、拷贝语义学第六章执行期语意学第七章站在对象模型的尖端。

Z5433523的博客 345

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《深度探索C++对象模型》笔记

本文深入探讨C++对象模型及其底层实现机制,重点分析了虚函数、继承与虚继承对内存布局的影响。文章在64位MSVC环境下,通过具体代码示例展示了类对象的内存结构:非静态数据成员存储在对象内,静态成员和函数存放在对象外;虚函数通过虚函数表实现动态绑定,派生类会扩充修改基类虚函数表;虚继承通过虚基类表解决多继承问题,共享基类子对象。测试数据表明,虚继承会导致更复杂的对象模型,涉及多个虚指针和数据分隔。文章强调对象起始地址对this指针和成员调用的关键影响,为理解C++底层机制提供了重要参考。

Coolbike的博客 912

深度探索C++对象模型——学习笔记1

第一章 关于对象C++对象模型1.简单对象模型一个object是一系列的slot,每个slot对应一个成员。在这个模型中,把“指向成员的指针”放在object中。这样就避免不同成员类型不同,占用的不同的存储空间。object大小=指针大小*成员个数意义:slot被应用于C++指向成员指针观念中2.表格驱动对象模型这种模型讲所有的成员相关信息抽取出来,放在一个数据成员表中和一个成员函数表中,objec

day day up 751

组件对象模型的规则

摘要本文的目的是为使用和实行Microsoft的组件对象模型(COM)提供迅捷的参考。读者若想更好的理解什么是COM,以及隐藏在它的设计及体系中的动机,应该阅读开始的两章。它们是关于组件对象模型的技术说明书(MSDN库,技术说明书)。第一章是简要介绍,而第二章是提供了一个彻底的综述。此处的信息都来自于COM的技术说明书。规则1:必须实现Iunknown如果一个对象没有至少实现一个最小程

Grrr的专栏 1321

深度探索C++ 对象模型

深度探索C++ 对象模型 第二章 对象 第二章第一节 类对象所占用的空间 成员函数不占用类对象的内存空间一个类对象至少占用1个字节的内存空间成员变量是占用对象的内存空间成员函数 每个类只诞生 一个(跟着类走),而不管你用这个类产生了多少个该类的对象; 第二章第二节 对象结构的发

weixin_42252757的博客 1173

深度探索C++对象模型

深度探索C++对象模型 第一章 关于对象 1.1 C++对象模型 Nonstatic data members被配置于每一个class object内 static data members 被存放在所有的class object之外 static 和 nonstatic function members 也被存放在所有的class oject之外 Virtual functions 分为以下两步: 每个class产生一堆指向virtual functions的指针,放在表格中。这个表格被称为virtua

qq_45786156的博客 820

《深度探索c++对象模型》读书总结

一,导读 1.目前所有编译器对于virtual function的实现都是使用各个class专属的virtual table,大小固定,并且在程序执行前就构造好了 2.explicit:显式的(明确出现于c++程序代码) implicit:隐式的(隐藏于程序代码背后) 二,关于对象 问题1.如果要打印出一个3d坐标的x,y,z一共有哪些方法呢? 方法一:先声明一个坐标s...

zhangxiaofan666的博客 711

C++对象模型-构造函数语义学 第二章笔记

C++默认构造函数会在需要的时候被产生出来,且只在编译器需要的时候才合成。且合成出来只执行编译器需要的行动。即使合成了默认构造函数,也不会将成员变量初始化为0,若要如此需要程序员提供明显的默认构造函数。 编译器默认构造函数在如下4种情况会合成出来(nontrival default constructor) 成员函数带有默认构造函数,则此class的implicit default constructor就是nontrivial。在构造函数真正需要调用时才会合成默认构造函数 ...

nwao7890的专栏 249

读书笔记《深入理解C++对象模型》

1.1 1. C++对象模式 (1)简单对象模型:在这个简单模型中,一个object是一系列的slots,每一个slot指向一个members,Members按其生命次序,各被指定一个slot,每一个data member或者function member都有自己的一个slot (2)表格驱动对象模型:把所有与members相关的信息抽出来,放在一个data member table和一个m

飞翔在北京的博客 683
上一篇: 读python3.6官方文档的一些总结
下一篇: 第二章对象模型(2):揭开对象的神秘面纱
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值