python 面向编程 学习笔记

一 面向对象入门

1.1 理解对象

  1. 对象可以指自然界中的任何事物
  2. 计算机为解决某个领域问题所采用的事物(自然界中的事物的模型化)
  3. 事物(对象)具有自身的特征或能力
  4. 计算机中的对象具有解决问题所需要的特征或能力

1.2对象的优越性

  1. 封装
    将模型的特征和能力打包在一起
    模型的改变由模型自身来完成,就像自然界中的事物一样
    隐藏模型的细节,外界只能使用它,而不必/不能改变它
  2. 继承
    符合自然界的分类规律
    快速的代码重用
  3. 多态
    子类可以继承父类的特征与能力,还可以通过自定义来修改其特征与能力
    鸭子类型(duck typing)只要有调用者需要的属性,就可以调用,不需要接口
  4. 组合
    一个模型可以由其他的模型组成

二 定义和使用类

2.1 类与实例之间的关系

定义类就是建立模型(模子/印章)
实例化类就是建立真实事物(产品/印章印出来的图案)

2.2 实例化步骤

  1. 调用_new_()方法创建实例
  2. new()自动从ob ject继承
  3. 调用_init_()方法对其初始化
  4. init()方法在类中定义

2.3 添加类说明

-紧跟类名行之后,以三音好包围的字符串
-查看类说明 类名 do c. help(类名)

2.4 新式类与经典类

  1. -python 2.x 版本

      默认为是经典类
      继承object为新式类
    
  2. -python 3.x 版本

      默认为是经典类
      继承object为新式类
    
  3. 区别
    经典类继承为深度优先
    新式类继承为广度优先

三 描述对象的特征

3.1 实例属性

  • 类被实例化以后才会具有的属性
  • 一般在_init_()方法中创建并初始化
  • 直接使用即定义:self.<属性名>
  • 引用方法:self.<属性名>
  • self是用来代表类的实例的
  • 类外用实例名,属性名方式定义和引用
  • 相同类的不同实例其实例属性是不相关的
  • 一般不建议在_init_()方法之外创建和初始化实例属性
  • 一般不推荐类外定义和修改,修改可以单独定义方法

3.2 类属性

  • 类定义后就存在,而且不需要实例化
  • 类属性使得相同类的不同实例共同持有相同变量

3.3 私有属性

  • 不提供限制属性访问的关键字(无法限制类的各种属性在类外直接访问)
  • 使用 _开头的变量名加以标志,应该只有类对象及其子类能访问(非强制性)

3.4 特殊属性

  • 保存对象的元数据

四 让对象具有能动性

 具有能动性就是添加方法

4.1 类的方法的定义

 def  fun_name(self, ...):
    pass

其中的参数self代表类的实例,在调用方法时由系统自动提供
方法定义时必须指明self参数

4.2 类的方法调用

  • 与普通的函数调用类似
  • 在类的内部调用:self.<方法名> (参数列表)
  • 在类的外部调用:<实例名>.<方法名>(参数列表)
  • 注:以上两种调用方法中,提供的参数列表中都不用包括self

4.3 类内方法相互调用

  • 在一个类的内部方法之间是可以相应调用的
  • 调用方法同上面所述的在类的内部调用方法

4.4 构造方法及其作用

  • 构造方法就是前面课程提到和使用的__init__方法
  • 构造方法的作用就是类实例化时初始化实例
  • init()方法就是类实例化的第二步自动调用的函数
  • 注意其方法名是固定的,但其参数同普通方法一样,至少应带有self参数
  • 初始化实例包括:定义和初始化实例属性;或调用类的一些方法
  • 构造方法可以带有除self外的其他各种参数(关键字参数、默认参数等)可以达到在实例化类时,为相应的属性传入指定的值

4.5 提醒

  • 本节课所定义的都是类的实例化方法,和实例属性一样,必须进行类实例化之后,才能存在和调用他们
  • 这里使用的是python3.x 版本,print是一个函数

五 深入类的属性

5.1 同名的类属性与实例属性

  • 以实例名,属性名引用时,优先引用实例属性
  • 以类名,属性名引用时,只能引用类属性

5.2 属性访问的特殊方法(反射)

提供用字符串来操作类的属性/方法的方式
主要工具函数: hasattr (obj_name,‘属性名’)
setattr (obj_name,‘属性名’,值)
getattr (obj_name,‘属性名’)

5.3 属性包装

将方法包装成属性,以隐藏相关实现

  • 控制属性的类型或范围
  • 虚拟属性(由其他属性处理后得来)

三种属性操作

  • 可读:@property
  • 可写:@.setter
  • 可删:@.deleter

5.4 描述符

将实现特殊协议方法的类作为另一个类的类属性

用来拦截和控制属性访问并可以重复使用

协议方法:

  • get()
  • set()
  • delete()

分类

  • 数据描述符(实现全部协议方法)
  • 非数据描述符(实现部分协议方法)
  • 说明:所有类成员函数都是非数据描述符

同名的实例属性和非数据描述符(以方法为例)访问优先级
注意:只能在新式类中使用

_call _()让类的实例如函数一样可调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值