第三章:类型与对象——参考手册笔记

对象

构造角度

基本数据结构(使用相应的字面量)

自定义对象(使用构造器或其他构造模式)

 

组成角度

程序中存储的数据

包含:数据(复合)

   属性:标识,地址/引用,类型,值

 

实例被创建后,标识类型不可改变

对象是类型的实例

类型:对象的内部表示 (属性)与 支持的方法

 

可变对象:值可改变

不可变对象

容器,集合:包含对其他对象的引用

 

 

对象拥有属性方法

属性:相关的值

方法:在对象上执行调用操作()的函数

点运算符,访问属性与方法

 

3.2对象标识与类型

内置函数

标识

id():返回对象标识(整数)(Linux:文件标识符)

is():比较两个对象的标识

类型

type():返回对象的类型

因为类型是对象,类型的定义唯一,对其所有实例相同

所以可用

type(a) is type(b)

对两个实例的类型做比较

 

内部类型都有名字,list,dict,file等

检查是否为某种内置类型

type(a)  is list

 

继承:某个类的特殊化

检查继承

isinstance(a,list)

 

其他:相同接口但不是实现于继承(抽象——实现)

 

3.3引用计数与垃圾回收

 

对象引用计数增加

分配新名字(引用,别名)

放入容器(容器包含对象的引用:容器定义)

 

引用计数减少:

del语句

引用超出作用域(退出)

重新赋值

 

不可变数据,在程序不同地方可共享,节约内存

 

垃圾回收机制:

1.引用为0,则之后不可能被访问到(Linux:最后一个链接为硬链接)

2.周期检测器:搜索不可访问的对象周期,删除。定期进行

 

3.4引用与复制

赋值动作的含义:

不可变对象:创建副本,副本指的是值

可变对象:创建引用

 

可变容器:赋值,浅复制

赋值:创建引用

a=b

a is b

浅复制:元素共享

a=list(b)

a is not b

深复制:创建对象的副本,递归复制副本

 

3.5第一类对象

python中被标识符引用的都是第一类对象

 

3.6内置类型:表示数据

 

null对象

字面量:None

函数缺省返回值时,返回None

可选参数的默认值

 

数值类型

 

序列类型

包含

可变:列表

不可变:字符串,元组

range不可变?

 

映射类型

对象的集合

字典:键-值

键必须为不可变对象

变key——hash——冲突

原key对应value不可访问

集合类型

保存不可变对象

 

3.7内置类型:表示结构

 

3.7.1 可调用类型

1.用户定义函数:

def语句

lambda表达式

模块级别的可调用对象

f.__属性__

name

dict字典:函数属性

defaults元组:默认参数

globals

closure元组:嵌套作用域相关数据

2.方法:类中定义

静态方法:普通

实例方法:实例作为第一个参数隐式传递,声明时写出,调用时不写,约定俗成为self

访问实例入口(允许进入实例作用域)——访问属性——修改(增删改查)

类方法:类型作为第一个参数隐式传递,声明时写出,调用时不写,约定俗成为cls

 访问类的入口(进入类作用域???python无类作用域???)

使用:

创建实例

查找方法

调用方法

 

绑定方法:实例.方法   可调用对象,封装了实例与方法。已经获得了参数self值的方法。科里化

 

函数声明——绑定参数——可调用对象——调用——返回值

 

函数的参数绑定过程:一次绑定所有 or 声明处绑定默认值(静态) or 调用时绑定当前执行环境(动态) or 方法绑定实例 or 泛型在调用处绑定类型参数

未绑定方法:类型.方法  未获得参数self,需要显式传递实例。

调用运算符()

 m.__属性__

name

class定义方法的类

func实现方法的函数对象

self方法相关实例(非绑定方法,为None)

py3对self参数不作类型检查?

 

3.内置函数与方法

self方法相关实例(非绑定方法,为None)

 4.可调用的类与实例

定义__call__()

 

3.7.2类,类型,实例

type()返回对象的类型

type(Class) <type 'type'>

类型对象t属性

t.__属性__

__name__类名称

__bases__基类元组

__dict__字典:类方法与变量

 

类实例对象i属性

i.__class__实例所属类

i.__dict__

 

3.7.3模块类型

容器,保存import加载的对象

属性:__dict__ 字典实现的命名空间

 

3.8解释器内部的内置类型

代码对象

帧对象

跟踪对象

生成器对象

切片对象

 

3.9对象行为与特殊方法

特殊方法实现了对行为的支持

可以自定义方法,来支持特定的操作

 

行为                方法

创建,销毁             __new__,  __init__,  __del__

字符串表示(类型转化)         __str__,  __repr__,  __format__

比较,排序             __bool__,  __hash__, __lt__

类型检查 

isinstance(), issubclass()      __instance(subclass)check__

属性访问(.运算符)          __get(set,del)attr__

属性操作(额外逻辑层),与属性访问的方法交互

描述符属性访问——显示调用描述符对象的相应方法

描述符对象包装             __get__,set,delete

序列与映射             __len_,get/set/del item ,contains

迭代                __iter__,返回可迭代对象

数学操作              很多

调用操作              __call__

上下文管理with           __enter__,exit

对象检查dir()           __dir__

posted on 2018-05-28 10:34  秦梦超  阅读(102)  评论(0编辑  收藏  举报

导航