Python回顾与整理2:Python对象

0.说明

说对象是面向对象编程语言最重要的一部分一点也不为过,没有了“对象”,面向对象将无从谈起。Python也是如此,如果无法掌握对象,你很难有大的进步与提升。



1.Python对象

(1)对象特性

Python使用对象模型来存储数据,构造任何类型的值都是一个对象,所有的Python对象都拥有下面的三个特性:

  • 身份:每个对象一唯一身份标识,可使用内建函数id()查看该值(可以认为这个值是该对象的内在地址)
  • 类型:对象的类型决定了对象(可以保存什么类型的值,进行什么样的操作,遵循什么样的规则),可以使用内建函数type()查看(对象的类型也是一个对象,因此type()返回的是一个对象,而不是字符串)
  • 值:对象表示的数据项

对于身份特性,它是可读的;对于类型特性,新式类型和类可以修改,但不建议初学者这样做,另外Python有一系列的基本(内建)数据类型,可以自己定义(一般推荐通过创建和实例化类来对特定的数据进行存储);对于值,取决于该对象是否支持更新操作。

(2)对象属性

Python使用句点标记法来访问属性,最常用的属性是函数和方法,当然一些Python对象也有数据属性。



2.标准类型

  • 数字(分为几个子类型,有三个是整型)

    Integer    整型

    Boolean    布尔型

    Long integer    长整型

    Floating point real number    浮点型

    Complex number    复数型

  • String    字符串
  • List            列表
  • Tuple         元组
  • Dictionary  字典

需要注意的是,使用上面这些基本类型所构造的值都为该类型对应的对象。



3.其他内建类型

  • 类型
  • Null对象(None)
  • 文件
  • 集合/固定集合
  • 函数/方法
  • 模块
  • 下面主要说明Type和None类型,其它的后面会讨论。

(1)类型对象和type类型对象

前面提到,对象有一系列行为和特性,而这些信息就是保存在对象的类型当中:

>>> type(42)
<type ‘int‘>

type()返回的是一个类型对象,表明42是一个数字类型对象,而<type ‘int‘>本身也有所属于的类型,可以继续使用type()来查看:

>>> type(type(42))
<type ‘type‘>

<type ‘type‘>表示<type ‘int‘>是一个type类型对象,尝试继续使用内建函数type()来作进一步操作:

>>> type(type(type(42)))
<type ‘type‘>

得到的还是type类型对象,于是可以有下面的结论:

  • 所有类型对象的类型都是type,它也是所有Python类型的根和所有Python标准类的默认元类(metaclass)
  • 在Python中,类就是类型,实例是对应类型的对象(类比42的例子,42属于数字类型,它是数字类型构造值后的一个数字对象)

(2)None:Python的Null对象

Python有一个特殊的类型,被称为Null对象或者NoneType,它只有一个值,那就是None

>>> None
>>> type(None)
<type ‘NoneType‘>

None没有什么有用的属性,它的布尔值总是False。

(3)布尔值

前面提及布尔值,有以下几点注意:

  • 每个对象天生具有布尔True或False值
  • 空对象 值为零的任何数字或者Null对象的布尔值都是False
  • 用户创建的类实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0,那么它们的布尔值就是False


4.内部类型

  • 代码
  • 跟踪记录
  • 切片
  • 省略
  • Xrange

(1)代码对象

代码对象是编译过的Python源代码片段,它是可执行对象,通过调用内建函数compile()可以得到,然后可以被exec命令或eval()内建函数来执行。

代码对象本身不包含任何执行环境信息,它是用户自定义函数的核心,在被执行时动态获得上下文(事实上代码对象是函数的一个属性)。一个函数除了有代码对象属性以外,还有一些其他函数必须的属性,包括函数名 文档字符串 默认参数及全局命名空间等。

(2)帧对象

帧对象表示Python的执行栈帧。帧对象包含Python解释器在运行时所需要知道的所有信息,它的属性包含下面这些信息:

  • 指向上一帧的链接
  • 正在被执行的代码对象
  • 本地及全局名称空间字典及当前指令等

每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C栈帧,用到帧对象的一个地方是跟踪记录对象。

(3)跟踪记录对象

当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。

(4)切片对象

当使用Python扩展的切片语法时,就会创建切片对象。

(5)省略对象

省略对象用于扩展切片语法中,起记号作用。这个对象在切片语法中表示省略号。类似Null对象None,省略对象有一个唯一的名字Ellipsis:

>>> Ellipsis
Ellipsis
>>> type(Ellipsis)
<type ‘ellipsis‘>

它的布尔值始终为True。

(6)Xrange对象

调用内建函数xrange()会生成一个Xrange对象,xrange()是内建函数range()的兄弟版本,用于需要节省内存使用或range()无法完成的超大数据集场合。

时间: 2024-10-10 01:57:47

Python回顾与整理2:Python对象的相关文章

Python回顾与整理5:映像和集体类型

0.说明 依然是按照前面介绍的几种序列类型的思路来总结字映像类型和集合类型,即先做一个介绍,再讨论可用操作符.工厂函数.内建函数和方法. 1.映射类型:字典 映射类型被称做哈希表,而Python中的字典对象就是哈希类型,即它是按照这样的方式来存储数据:(哈希表的算法)是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储对象的值.任何一个值存储的地址取决于它的键,正因为这种随意性,哈希表中的值是没有顺序的,所以Python中的字典对象中的元素也是无序的. 下

Python回顾与整理4:序列(字符串/列表/元组)

0.说明 序列其实是Python的某几类数据类型的统称,如字符串,列表和元组,将它们统称为序列,是因为:它们的成员有序排列,并且可以通过下标偏移量访问到它的一个或者几个成员. 总结的思路为:先介绍适用于所有序列类型的操作符和内建函数,然后再分别对这几种序列类型进行介绍. 1.序列 序列类型都有相同的访问模式:它的每一个元素都可以通过指定一个偏移量的方式得到,多个元素通过切片操作的方式得到.而在Python序列中,偏移量的规则如下(假设序列长度为N): (1)标准类型操作符 在<Python回顾与

Python回顾与整理3:数字

Python回顾与整理3:数字 0.说明 数字用的次数是否多主要是看需求,如果是做自动化运维平台开发,比如做一个自动监控的系统,那么你肯定需要收集一定量的数据,然后再对这些数据做一定的处理,那么这时候,你就一定需要用得上数字的.当然,我这里所说的要不要用数字,指的是,你是否需要对你的数据做一定的处理. 1.数字简介 数字是不可更改类型,也就是说变更数字的值会生成新的对象. (1)创建数值对象并用其赋值(数字对象) >>> anInt = 1 >>> aComplex =

Python回顾与整理12:执行环境

0.说明 作为<Python核心编程>核心部分的最后一章,这篇的内容也相当重要.对于高级部分的整理,将采用<Python核心编程>第三版,但是,方式会以之前的完全不一样了. 1.可调用对象 可调用对象即可通过函数操作符"()"来调用的对象,也可以通过函数式编程接口来进行调用,如apply().filter().map()和reduce().Python有4种可调用对象:函数.方法.类和一些类的实例. (1)函数 Python中有三种不同类型的函数:内建函数(BI

Python学习笔记整理(三)Python中的动态类型简介

Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之间的关系都适用.那么这个概念也容易理解并掌握. 1.变量,对象和引用 变量创建:一个变量,当代码第一次给它赋值时它就被创建了.之后的赋值将会改变已创建的变量名的值.Python在代码运行之前先检测变量名,可以当成是最初的赋值创建变量. 变量类型:变量永远不会有任何的它关联的类型信息或约束.类型的概念

Python学习笔记整理(四)Python中的字符串..

字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'\temp\diege' Raw字符串 抑制(取消)转义,完全打印\tmp\diege,而没有制表符 T5=u’diege' Unicode字符串 T1+T2     合并 T1*3    重复 T2[i]    索引 T2[i:j] 分片

Python学习笔记整理(十一)Python的while和for循环

while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块.break,continue用在循环内,跳出整个循环或者跳出一次循环. 一.while循环 1.一般格式 格式:首行以及测试表达式,有一列或多列缩进语句的主体以及一个选用的else部分(控制权离开循环时而没有碰到break语句时会执行) python会一直计算开投的测试,然后执行循环主体内的语句,直到测试返回假值为止. while <test>:     <statement

Python学习笔记整理(十)Python的if测试

if语句是选取要执行的操作. 一.if语句 1.通用格式 形式是if测试,后面跟着一个或多个可选的elif(else if)测试,以及一个最终选用的else块.测试和else部分可以结合嵌套语句块,缩进列在行首下面.Python会执行第一个结算结果为真的代码块,或者如果所有测试都为假时,就执行else块. if语句一般形式如下: if <test1>:     <statements1> elif <test2>:     <statements2> els

Python回顾与整理10:模块

0.说明 模块是用来组织Python代码方法的方法,而包则是用来组织模块的,充分利用好包和模块将有利于开发出结构清晰的大型程序. 1.什么是模块 所谓模块,其实就是一个包含了特定功能代码的.py文件,在这个.py文件中,主要有如下的代码类型: 包含数据成员和方法的类 一组相关但彼此独立的操作函数 全局变量 使用import语句就可以导入一个模块中的相关属性. 2.模块和文件 模块是按照逻辑上来组织Python代码的方法,而体现在物理层面上,它就是一个文件,因此,一个文件被看作是一个独立模块,一个