文章目录

  • 对象模型的概述
    • 接下来我们就要搞清楚类型和对象体系
      • 到这里我们已经知道了所有对象都有一个类型,并且统统继承自 object,这样 对象,object, type, 三者的关系变得很神秘,我们先来介绍下
    • type 和object 两个特殊的类型
    • 变量只是一个名字
    • 可变对象与不可变对象
  • 总结:这就是初步的内容,理解和知道这些概念后,下节书中就会深入python源码,在C语言层面讲解这些东西的实现。

对象模型的概述

首先我们要始终铭记一句话: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语言层面讲解这些东西的实现。

第二章对象模型(1)相关推荐

  1. 3-8《Ruby元编程》第二章对象模型

    <Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].meth ...

  2. ppk on JavaScript第二章:背景(完结篇)

    无障碍规则 尽管无法预见可能损害一个有脚本网站的可用性的所有情形,但我已经总结出一些可以帮助您在基础上不犯错的规则.不要把它们当作JavaScript和无障碍的终极规则,这只是能防止一些常见低级错误的 ...

  3. 【Git】版本控制管理(第二版) 前言 第一章 第二章

    版本控制管理 前言 第一章 第二章 资源 前言 本书结构 第一章 介绍 总结在开头 1.1 背景 1.2 Git的诞生 1.3 先例 1.4 时间线 第二章 安装Git 2.1 使用Linux上的二进 ...

  4. 网易云课堂[Web安全工程师]第一部分 第二章WEB简介 学习记录

    [仍旧写在前面 个人学习笔记] 第一部分 WEB基础知识 第二章 WEB基础知识 第一节 前端开发基础--HTML课后小测验 1 HTML页面的注释符号是那种?<!-- --> 2 若要在 ...

  5. C++ API 设计 07 第二章

    第二章 品质 本章的目标是回答下面的问题:一个良好的API需要什么样的品质?大多数开发人员都同意,一个良好的API应该设计得很优雅,而且仍然非常容易使用.它应该在后台运行且使用起来让你觉得很惬意.这些 ...

  6. 第二章 Qt编程核心技术

    QT编程核心技术介绍 第二章 Qt编程核心技术 Qt/X11与Qt/Embedded版本的Qt类库,尽管类的底层实现有一些细微区别,但类的声明及方法函数是一样的,对于编写Qt应用程序的编程者来说,几乎 ...

  7. JavaWeb 第二章 JavaScript

    第二章 JavaScript 学习目标 了解JavaScript的起源与特性 掌握JavaScript的基本语法 掌握JavaScript的DOM 掌握JavaScript的事件绑定 掌握正则表达式的 ...

  8. 网页设计与制作:第一章HTML与CSS网页设计概述与第二章HTML入门

    第一节:Web基本概念 1,认识网页 (1)网页主要有文字,图像和超链接等元素构成: 2,名词解释 (1)internet:就是通常所说的因特网,是由一些使用公用语言互相通信的计算机连接而成的网络. ...

  9. 王道考研 计算机网络笔记 第二章:物理层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 后续章节将陆续更新- 第二章 一.物 ...

最新文章

  1. 机器学习基础 --- numpy的基本使用
  2. 一篇文章读懂麦当劳发行MacCoin是什么
  3. java c 性能比较_java 中ArrayList与LinkedList性能比较
  4. .NET Framework基础知识(二)(转载)
  5. UE4 蓝图RandomStreams
  6. Redisson 实现分布式锁
  7. 日志分析平台-ELK
  8. 造谣“外卖员因差评杀人” 女子被依法刑事拘留
  9. 数据结构——二叉排序树
  10. 释放vmware磁盘空间
  11. 把复杂变简单,能产生颠覆的力量
  12. hive 如何将数组转成字符串_Hive 字符串操作[转]
  13. Introduction to Computer Networking学习笔记(十):Finite State Mechines(有限状态机)以TCP连接断开为例
  14. Java实习日记(6)
  15. 安装英伟达显卡旧版驱动
  16. 马云的卸任,刘强东的舆论,万达的动荡,谁将是下一个龙头老大!
  17. android studio深色模式,Xamarin 中的深色模式
  18. 邮箱搬家操作步骤及详细说明
  19. 数据安全法整理学习笔记
  20. 如何将网易云音乐的歌单同步到spotify

热门文章

  1. java参数错误,参数不匹配错误java.lang.IllegalArgumentException: argument type mismatch
  2. [4.6每周质量报告]等离子PK液晶电视
  3. freeswitch和sofia-sip中关于sip的消息机制
  4. Cocos2d-x学习笔记三之飞机游戏详解之GameOver类的讲解
  5. 美国权威机构:2005年美国商学院排座次
  6. 使用qihoo360签名工具完成对apk的签名
  7. Qihoo360/wayne安装部署管理Kubernetes(k8s)集群
  8. SteamVR插件简介
  9. 全国信息化计算机应用技术资格证书,全国信息化计算机应用技术资格认证
  10. ENS最新合约源码分析二