python面向对象
- 一、基本理论
- 二、 面向对象在python中实践
- 2.1 如何去定义类
- 2.2 通过类创建对象
- 2.3 属性相关
- 2.4 方法相关
- 三、python对象的生命周期,以及周期方法
- 3.1 概念
- 3.2 监听对象的生命周期
- 四、面向对象的三大特性
- 4.1 封装
- 4.2 继承
- 4.2.1 概念
- 4.2.1 目的
- 4.2.2 分类
- 4.2.3 type和object区分
- 4.2.4 继承下的影响
- 4.3 多态
一、基本理论
1.什么是对象?万物皆为对象,对象是具体的事物:1. 拥有属性2. 拥有行为3. 把很多零散的东西,封装为一个整体2. python中体现:python是一门特别彻底的面向对象编程(OOP)的语言3. 面向过程&面向对象都是解决问题的思路面向过程:在解决问题的时候,关注的是解决问题的每个过程(步骤)面向对象:在解决问题的时候,关注的是解决问题所需要的对象对比:1. 面向对象和面向过程都是解决问题的一种方式(思想) 面向对象本身是对面向过程的封装2. 面向过程编程最重要的是按照步骤划分,把一个任务,分解成具体的每一个步骤3. 面向对象编程最重要的是划分不同的对象,之后去确定对象的属性和行为4. 如何从面向过程编程思想,过渡到面向对象编程?4.1 先列举出一个任务的具体实现的步骤4.2 试图分离这些实现步骤的功能代码块4.3 将这些功能代码块,划分到某一个对象中4.4 根据整个对象以及对应的行为,抽象出对应的类4. 类4.1 类:某个具体对象特征的抽象4.2 类的作用:根据抽象的类,生产具体的对象4.3 类的组成:名称属性方法注意:以上属性和方法,都是抽象的概念在产生对象之后,对象才用于具体的属性值,和方法实现对象和类的关系:对象可以抽象为类,类可以实例化对象
二、 面向对象在python中实践
2.1 如何去定义类
class 类名: pass 里面的pass表示一个空语句,为了去保证整个结构的一个完整
2.2 通过类创建对象
变量=类名() 进行实例化
2.3 属性相关
1. 属性相关1.1 属性和变量的区别及判定依据?区别:1. 概念:变量是”可以改变的量值“属性是”属于某个对象的特性“2. 访问权限:变量:根据不同的位置,存在不同的访问权限属性:只能通过对象来进行访问判定依据:是否存在宿主2. 对象属性2.1 怎样让一个对象拥有一些属性?(增)1. 直接通过对象,动态添加 对象.属性 = 值2. 通过类的初始化方法(构造方法) __init__方法2.2 怎样访问或者修改一个对象的属性?(查,改)通过对象.属性来进行查询,如果之前没有就是查询,有的话就是修改2.3 怎样删除一个对象的属性?(删)del 对象.属性补充:查看对象所有属性 对象.__dict__3. 类属性3.1 怎样让一个类拥有属性?(增)方式1:类名.类属性 = 值方式2:在类里面直接写上变量名3.2 怎样让一个类拥有属性?(查)方式1:通过类访问,类名.类属性方式2:通过对象访问,对象.类属性注意:通过对象访问到类属性,是和python对象的属性查找机制有关,优先到对象自身去查找属性,找到则结束;如果没有找到,则根据_class_找到对象对应的类,到这个类里面去找。3.3 怎样让一个类拥有属性?(改)方式1:类名.属性 = 值方式2:对象.__class__.属性 = 值3.4 怎样让一个类拥有属性?(删)通过类名删除,del 类名.属性,但是不能通过对象删除,del 语句只删除直系属性。
2.4 方法相关
1. 方法的概念:描述一个目标的行为动作。2. 方法的划分:2.1 实例方法 默认第一个参数需要接收到一个实例2.2 类方法 默认第一个参数需要接收到一个类2.3 静态方法 第一个参数啥也不默认接收3. 实例方法3.1 标准调用使用实例调用实例方法, 不用手动传,解释器会自动把调用对象本身传递过去。3.2 其他调用1. 使用类调用2. 间接调用4. 类方法4.1 标准调用可以通过类或者用例来调用4.2 其他调用利用子类进行调用5. 静态方法既可以使用类调用或者用例调用补充:实例属性只能通过实例,类属性的话,既可以通过实例或者类进行访问。
三、python对象的生命周期,以及周期方法
3.1 概念
生命周期:指一个对象,从诞生到消亡的过程当一个对象被创建时,会在内存中分配相应的内存空间进行存储当这个对象不再使用,为了节约内存,就会把这对象释放
3.2 监听对象的生命周期
1. __new__方法当我们创建一个对象时,用于给这个对象分配内存的方法,通过拦截这个方法,可以修改对象的创建过程,比如:单例设计模式2. __init__方法对象创建完成之后,会调用init方法3. __del__方法
四、面向对象的三大特性
4.1 封装
- 概念
将一些属性和相关方法封装都一个对象中,对外部隐藏内部具体实现细节。 - 好处
- 使用起来更加方便
- 保证数据的安全
- 有利于代码维护
4.2 继承
4.2.1 概念
继承:一个类“拥有”另外一个类的“资源”的方式之一。
- 拥有:并不是资源的复制,变为双份资源,而是资源的“使用权”。
- 资源:指“非私有的”属性和方法。
4.2.1 目的
继承的目的就是为了方便资源重用。
4.2.2 分类
- 单继承:仅仅继承了一个父类。
- 多继承:继承了多个父类。
4.2.3 type和object区分
4.2.4 继承下的影响
1. 资源的继承明确:在python中,继承是指资源的使用权,所以,测试某个资源能否被继承,其实就是测试在子类当中,能不呢个访问父类中的这个资源。结论:除了私有的属性和私有的方法,其他基本上都能继承。2. 继承的下的影响2.1 继承几种形态单继承链无重叠的多继承链有重叠的多继承链2.2 几种形态应该遵循的标准规则2.2.1 单继承遵循“从上到下的原则”,自己身上没有这个资源,就到父类里面去找,父类再没有,再往上走。2.2.2 无重叠的多继承按照继承的先后次序,优先调用左侧继承链上的属性或者方法.2.2.3 有重叠的多继承遵循“从上到下的原则”。2.3 资源的覆盖(属性和方法)在MRO的资源检索链当中,优先级比较高的类写了一个和优先级比较低的类一样的一个资源(属性或方法),到时候,再去获取相关资源,就会优先选择优先级比较高的资源,而摒弃优先级比较低的资源,造成“覆盖”的假象
4.3 多态
多态:一个类,所延伸的多种形态。调用时多种形态:在继承的前提下,使用不同的子类,调用父类的同一个方法,产生不同的功能。