昨日回顾
-
继承
新建类的方式,新建的类称之为子类或派生类,继承的类称之为父类,也叫基类或超类
-
继承的目的
解决代码的冗余问题
-
寻找继承关系
先抽象,再继承
-
什么是抽象
抽取类相似的部分
-
在继承背景下对象属性的查找顺序
-从对象
-从子类
-从父类
-
派生
派生指的是子类继承父类的属性,并且派生出自己新的属性
-
子类派生出新的属性,并重用父类属性
若子类新的属性与父类的属性相同,则以子类的为准。
重用父类的两种方式:
1. 直接通过父类.`__init__`,将其当作普通的函数使用。 2. super().`__init__`,指向的是父类的`__init__`.
-
新式类与经典类
继承了object类都称之为新式类
在python2中,没有继承object的类都称之为经典类.
-
钻石继承:
新式类:
广度优先
经典类:
深度优先
组合
1.什么是组合?
组合指的是一个对象中的属性,是另一个对象.
2.为什么要使用组合?
组合目的和继承一样,为了减少代码冗余。
封装
1.什么是封装?
比喻:
封:比如把一个袋子封起来。
装:比如把一堆小猫,小狗,nick装到袋子里。
封装指的是把一堆属性(特征与技能)封装到一个对象中。
存数据的目的是为了取,对象
比喻:对象就好比一个袋子,袋子里面袋一堆属性。
2.为什么要封装?
封装的目的为了方便存取,可以通过对象,属性的方式获取属性。
3.如何封装
特征:变量 --》数据属性
技能:函数--》方法属性
在类内部,定义一堆属性(特征与技能).
通过 对象.属性 = 属性值
访问限制机制
1.什么是访问机制?
在类内部定义,凡是以__开头的数据属性与方法属性,
都会被python内部隐藏起来,让外部不能‘直接’访问类内部的__开头的属性,
比如: __name = ‘tank'
2.访问限制机制的目的?
一堆隐私的属性与不能被外部轻易访问的属性,可以隐藏起来,不被外部直接调用。
好处:
对重要数据获取的逻辑更加严谨,进而保证了数据的安全。
接口:隐私属性可以通过封装一个接口,在接口内做业务逻辑的处理,再把数据返回给调用者。
注意:在python中,不会强制限制属性的访问,类内部__开头的属性,只是做了一种变形,若想直接访问,调用变形后的名字即可。
class Foo:
__name = 'tank' # --->_类名__属性名
property
1.什么是property
python内置的装饰器,主要是给类内部的方法使用.
2.为什么要用property
使用它的目的,是将类内部的方法(def 方法名())变成了(def 方法).
在对象调用某个方法时,将对象.方法()变成对象.方法(看起来像一个普通的数据属性)
3.如何使用property
@property
多态
1.什么是多态?
多态指的是同一种事物的多种形态.
2.多态的目的:
多态也称之多态性,在程序中继承就是多态的表现形式.
多态的目的是为了,让多种不同类型的对象,在使用相同功能的情况下,调用同一个名字的方法名。
父类:定义一套统一的标准。
子类:遵循父类统一的标准。
多态的最终目的:统一子类编写的规范,为了让使用者更方便调用相同功能的方法.
3.如何实现:
-继承
注意:在python中,不会强制要求子类必须遵循父类的一套标准,所以出现了抽象类
抽象类
1.是什么?
abc模块 abstract_class2.使用的目的?
强制子类必须遵循父类的一套标准.3.如何使用
import abc鸭子类型
鸭子类型:
1.什么是鸭子类型?
在不知道当前对象是何物的情况下,但是你长得像鸭子,那么你就是鸭子类型.
在python中,不推荐使用抽象类强制限制子类的定义,但是推荐类都遵循鸭子类型.
-
继承:
耦合性太高,程序的可扩展性差 -
鸭子类型:
耦合度低,程序的可扩展性强