第三章:类型与对象——参考手册笔记
对象
构造角度
基本数据结构(使用相应的字面量)
自定义对象(使用构造器或其他构造模式)
组成角度
程序中存储的数据
包含:数据(复合)
属性:标识,地址/引用,类型,值
实例被创建后,标识与类型不可改变
对象是类型的实例
类型:对象的内部表示 (属性)与 支持的方法
可变对象:值可改变
不可变对象
容器,集合:包含对其他对象的引用
对象拥有属性和方法
属性:相关的值
方法:在对象上执行调用操作()的函数
点运算符,访问属性与方法
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__