zoukankan      html  css  js  c++  java
  • 第三章:类型与对象——参考手册笔记

    对象

    构造角度

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

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

    组成角度

    程序中存储的数据

    包含:数据(复合)

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

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

    对象是类型的实例

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

    可变对象:值可改变

    不可变对象

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

    对象拥有属性方法

    属性:相关的值

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

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

    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__

  • 相关阅读:
    ncnn 编译配置
    Android 配置 ncnn
    Android Studio 配置 OpenCV4+
    ROS catkin cheat sheet
    CMake 使用代理服务器
    Git设置代理服务器
    安卓assets处理
    【Android】Toast on non-UI thread
    高级语言编译和运行系统
    linux环境安装包方式
  • 原文地址:https://www.cnblogs.com/qmcj/p/9098844.html
Copyright © 2011-2022 走看看