python之设计模式及异常

2018-09-21  本文已影响0人  ivan_cq

面向对象的三大特征:
封装:根据职责将属性和方法封装到一个类中
继承:实现代码的重用,相同的代码不需要重复的编写
多态:(以封装和继承为前提),不同的子类对象调用相同的方法,产生不同的执行结果。


多态:不同的子类对象调用相同的方法,产生不同的结果。




类属性:
类是一个特殊的对象,类对象(创建实例对象的模板)在内存中只有一份,通过他可以创建出很多对象实例。除了封装实例的属性和方法外,类对象还有自己的属性和方法。
通过 类名.的方式 可以直接访问类的属性
类属性:就是给类对象定义的属性,通常用来记录与这个类相关的特征。

需求:定义一个工具类,每个工具都有自己的名字,需要知道使用这个类,创建了多少个实例工具对象。


类方法:只能访问类变量不能访问实例变量。


静态方法:在开发的时候,如果需要在类中封装一个方法,这个方法即不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法
这个时候我们可以把这个方法封装成一个静态方法。



类的结构:
术语--实例
1、使用面向对象开发,第一步是设计类
2、使用类名创建对象,创建对象的动作有两步
在内存中为对象分配空间
调用初始化方法init为对象初始化
3、对象创建后,内存中就有了对象实实在在的存在--实例
因此:
1、创建出的对象叫做类的实例
2、创建对象的动作叫做类的实例化
3、对象的属性叫做实例属性
4、对象调用的方法叫做实例方法
在程序执行时:
1、对象各自拥有自己的实例属性
2、调用对象的方法,可以通过self访问自己的属性,调用自己的方法
结论:
1、每一个对象都有自己独立的内存空间,保存各自不同的属性
2、多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部。


desc:
1.设计一个Game类
2.属性
定义一个类属性top_score记录游戏的历史最高分(与这个游戏有关,每次游戏的时候与游戏最高分无关)
定义一个实例属性player_name记录当前游戏玩家的玩家姓名
3.方法:
静态方法show_help显示游戏帮助信息(即不需要访问类属性,也不需要访问实例熟悉)
类方法show_top_score显示历史最高分(访问类属性)
实例方法start_game开始当前玩家的游戏
1.查看帮助信息
2.查看历史最高分
3.创建游戏对象,开始游戏


如果方法内部 即需要访问实例属性,又需要访问类属性,应该定义什么方法?
答案:应该定义实例方法因为,类只有一个,在实例方法内部可以使用类名,访问类属性。
1.实例方法--方法内部需要访问实例属性
实例方法内部可以使用 类名. 访问类属性
2.类方法:方法内部“只”需要访问类属性
3.静态方法:方法内部,不需要访问实例属性和类属性

设计模式:设计模式是前人的总结和经验的提炼,通常,被人们广为流传的设计模式都是针对某一特定问题的成熟解决方案。
单例设计模式:
单例:让类创建的对象在系统中有唯一的实例。
创建对象的时候:
1、为对象分配空间:new()
创建对象的时候,python解释器首先会调用new方法为对象分配空间,new是一个由object基类提供的内置静态方法,主要有两个作用:
在内存中为对象分配空间
返回对象的引用
2、对象初始化:init()
python解释器获得对象的引用后将引用的第一个参数,传递给init方法

正常情况,对象的地址不一样
单例模式
重写new方法的代码非常固定:
继承自父类方法
返回父类方法调用new_方法的结果
重写new方法一定要return object.new(cls)
否则python的解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法

需求:只执行一次初始化工作
解决办法: 1、定义一个类属性标记是否执行过初始化动作,初始值为false
2、在init中,判断这个标志如果false就执行初始化动作
3、然后将标志设置为true
4、这样,再次调用init方法时,初始化动作就不会再次被执行


异常:在程序运行过程中,如果解释器遇见一个错误,会停止程序的运行,并且提示一些错误信息,这就是异常。
我们在程序开发过程中,很难将所有的特殊情况都处理,通过异常捕获可以对突发事件做集中处理,从而保证程序的健壮性和和稳定性。
在程序的开发过程中,如果对某些代码的执行不能确定(程序语法完全正确),可以增加try来捕获异常。


需求:
1.提示用户输入一个整数
2.使用8除以用户输入的整数并输出
根据错误类型来捕获异常
try:
尝试执行的代码
except 错误类型1:
针对错误类型1,对应的代码处理
except 错误类型2:
针对错误类型2,对应的代码处理
...




对异常进行分类捕获!

对未知异常的捕获,避免程序因为未知的异常发生导致程序异常终止


对未知异常的捕获

异常的传递


在实验的过程中发现,对字符型的浮点数不能使用int方法
异常的传递

需求:提示用户输入密码,如果长度小于8,就抛出异常



断言:可以理解为提前预言,让人更好的知道错误的原因


断言
正常情况

文件操作

文件操作三步曲:打开,操作,关闭
文件指针:文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件的开始位置,当执行了read方法后,文件指针会移动到读取内容的末尾

上一篇下一篇

猜你喜欢

热点阅读