Python入门自学进阶——7--类与对象-异常、反射、单例模式

一、异常处理

语法:使用try...except语法

try:
    #代码块,相关逻辑,例如
    inp = input(‘请输入序号:’)
    i = int(inp)
except Exception as e:
    #上述代码块如果出错,自动执行当前块的内容,即在try块中出现错误
    #e是Exception对象,对象中封装了错误信息
    i = 1 
    print(e)
else:
    #try块没有出错,执行这里
finally:
    #不管出不出错误,这里都会执行
 

Exception是最大的错误范围,只要出错,都能捕获,细分下,还有很多细分错误,如IndexErrors等,这些都是Exceotion的子类。

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第1张图片

错误范围小的类放在范围大的类的上面,这样保证捕获精确度从高到低,也能更好的针对错误类型进行处理。

try模块出错

 Python入门自学进阶——7--类与对象-异常、反射、单例模式_第2张图片

 try模块没有出错

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第3张图片

 主动触发异常:上面的是内部被动异常

使用:raise Exception(‘主动错误’)

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第4张图片

 自定义异常:

继承Exception,自定义一个异常子类

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第5张图片

 断言:assert 条件,用于强制条件为真,不为真,就报错,可捕获,一般不捕获。

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第6张图片

使用场景,可以做单元测试,可以强制必须服从。 

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第7张图片

二、反射

反射,就是用字符串的形式操作类和对象。

正常情况下,类和对象的操作如下:

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第8张图片

 这里定义时的name、age,还有show都是类的成员,访问时,obj.name、obj.age、obj.show(),是直接的访问字段或方法名。这里的成员名不是字符串。

假设有一个变量 b =  ‘name’,是否可以用obj.b来访问对象的name?显然是不行的。这时就要用到反射来访问。反射的思想就是将一个字符串映射到一个成员变量名。如:

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第9张图片

 getattr()中的name就是一个字符串,可以使用变量来代替,如

 Python入门自学进阶——7--类与对象-异常、反射、单例模式_第10张图片

 类似的函数还有:

 也就是通过字符串对类或对象进行定制。例如,在对数据库表做ORM时,如果一个表是临时生成的,那要生成这个对象,可以先生成一个最原始的对象,然后遍历表的字段,获得一个字段列表,字段名都是以字符串的形式保存,这时就可以使用反射,将这些字段反射到对象中,相当于对对象按表格式进行修改,这样表与对象就一一对应了。

反射也可以在模块上进行:

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第11张图片

 反射在开发框架时应该很有用。

三、单例模式

单例,就是单个实例,实例,就是对象的另一种叫法,单例模式,就是永远使用同一份实例(对象)。内存中只存在一个这种对象。

Python入门自学进阶——7--类与对象-异常、反射、单例模式_第12张图片

 确保生成的实例一直都是一份,即如果实例存在,就返回这个实例,如果不存在,在生成这个实例,也就是生成实例的过程只执行一次,以后每次返回的都是这个实例。上面的obj、obj1和obj2都是同一个实例。

应用场景:数据库连接池、socket连接等

你可能感兴趣的:(Python入门,python,开发语言,后端)