美文网首页
python之设计模式及异常

python之设计模式及异常

作者: ivan_cq | 来源:发表于2018-09-21 17:04 被阅读0次

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


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




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

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


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


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



    类的结构:
    术语--实例
    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方法后,文件指针会移动到读取内容的末尾

    相关文章

      网友评论

          本文标题:python之设计模式及异常

          本文链接:https://www.haomeiwen.com/subject/ykfqnftx.html