一.反射
镜面反射
首先我们访问变量是不能加上双引号,否则会当做字符串处理,但是我偏要字符串进行访问对应的变量
我们可以通过字符串间接使用对象名或者类名,方法名
1.1getattr反射
查询对象属性值或方法
#格式
变量名 = getattr( 对象名 , "对象方法名/对象属性名" , 默认值 ) -->默认值是自己设定的
class People : def __init__(self,name ,age): self.name = name self.age = age def speak(self): print('hhh') stu1 = people('张三',18) stu2 = people('李四',21) getattr_1 = getattr(stu1, "name" , True) print(getattr_1) getattr_2 = getattr(stu1, "sex" , False) print(getattr_2)
结果:
1.2setattr
作用 : 建立对象属性
#格式
setattr(对象名 , "属性名" , 数值)
class People : def __init__(self,name ,age): self.name = name self.age = age stu1 = people('张三',18) print(stu1.__dict__) setattr(stu1,'sex','男') print(stu1.__dict__)
结果:
1.3hasattr
作用:判断是否存在该属性或方法
#格式
hasattr(对象 , '' 对象属性 '' )
class People : def __init__(self,name ,age): self.name = name self.age = age def speak(self): print('hhh') stu1 = people('张三',18) stu2 = people('李四',21) a = hasattr(stu1 , 'name') print(a) b = hasattr(stu1,'sex') print(b)
结果:
1.4delattr
作用:删除对象属性/方法
#格式
delattr( 对象名,"属性名/方法名")
class People : def __init__(self,name ,age): self.name = name self.age = age def speak(self): print('hhh') stu1 = people('张三',18) stu2 = people('李四',21) print(stu1.__dict__) delattr(stu1,'name') print(stu1.__dict__)
结果:
1.5应用
class People: def register(self): print('这是注册功能') def login(self): print('这是登录功能') people_1 = People() select = input('请输入你的选择') if hasattr(people_1,select):#select存在则输出if语句 getattr(people_1,select)() else: print('输入错误')
二.异常
2.1异常的定义
什么是异常:报错
也可以理解为突然终止程序或者程序效果无法满足需求的时候(异常)
捕捉异常:因为我们在程序编辑中,都会有些我们无法确定,或者确定有问题的代码可以进行预处理,是避免后面程序因为某个代码而正常运行
2.2异常错误
1.语法错误:捕捉不了,因为这个语法错误是可以完全避免的 --sytaxError
2.逻辑错误
NameError 没有定义标识符
TypeError 类型错误, 不同类型进行数学计算
IndexError 下标值超出范围
......
2.3异常处理
格式:
try:
代码块 #认为有问题的代码
except 异常类型:
代码块 #编写输出指定的代码或者错误原因
else:
代码块 #如果try没有捕捉到任何异常就运行这个代码
finally:
代码块 #不管是否捕捉异常都运行这个代码
#Exception可捕捉任何异常
li = [1,2,3] try : print(li[100]) except Exception as message: print('没有这么长') print(message) else: print('就是这么长') finally: print('不管怎么说它是一个列表')
结果:
2.4assert断言
assert 断言 :判断性的语言 下结论
就是测试, 下判断
在表达式不成立的时候,程序不会继续运行,报错返回异常结果
#格式
assert 判断表达式 返回异常结果
判断表达式:结果为bool类型都可以认为是判断表达式
返回的异常结果是自定义的
cost_monet = 1000 my_money =int(input('请输入你的余额')) assert cost_monet <= my_money,'余额不足' print(f'购买成功,剩余{my_money-cost_monet}元')
2.5定义异常
自定义一个异常信息
#格式
raise 自定义异常 (返回异常信息)
my_money = int(input('请输入您的余额')) if my_money<1000: raise Exception('余额不足,无法支付') else: print(f'支付成功,还剩{my_money-1000}元')
结果: