持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
大家好,我是木大木大,因为疫情和环境原因啊,在家开始了自学python的路子,从此深坑加一人。后面我会每天持续更新一些学习python的过程,当然一开始就是一些基础啦,希望大家多多支持,莫嫌弃啦~
一、反射
反射:通过字符串的形式进行操作对象的属性方法
1、对象反射
1、getattr 获取指定的对象属性以及方法
变量名 = getattr(对象 , '对象属性' ,设置默认值)
# 默认值:当在对象中查找不到对应的属性是返回的内容 , 如果没有设置的话 , 将会返回没有该属性的报错
2、setattr 设置对象属性
setattr(对象 , '对象属性' , 值)
3、hasattr 判断对象是否有对应的属性以及方法
变量名 = hasattr(对象 , '对象属性')
# 该方法返回的是bool类型
4、delattr 删除对象的属性
delattr(对象 , '对象属性')
代码:
class Foo:
def __init__(self , name , age):
self.name = name
self.age = age
def say_hi(self):
print(f'hi 靓仔/靓女:{self.name}')
# getattr 获取指定的对象属性
# 变量名 = getattr(对象 , '对象属性' ,设置默认值)
ac = Foo('阿宸' , 24)
n = getattr(ac , 'name')
print(n)
h = getattr(ac , 'say_hi')
h()
f = getattr(ac , 'height' , '没有你要看的')
print(f)
# 2、setattr 设置对象属性
# setattr(对象 , '对象属性' , 值)
print(ac.age)
setattr(ac , 'age' , 25)
print(ac.age)
# 3、hasattr 判断对象是否有对应的属性以及方法
# d = hasattr(对象 , '对象属性')
d = hasattr(ac , 'name')
print(d)
a = hasattr(ac , 'height')
print(a)
# 4、delattr 删除对象的属性
delattr(ac , 'age')
# print(ac.age)
2、反射的使用
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
ac = User()
# 没有使用对象反射的情况
choose = input('请输入你要操作的功能:')
if choose == 'login':
ac.login()
elif choose == 'register':
ac.register()
elif choose == 'speak':
ac.speak()
else:
print('输入有误')
使用反射
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
ac = User()
# 使用反射
choose = input('请输入你要操作的功能:')
if hasattr(ac , choose):
fun = getattr(ac , choose)
fun()
else:
print('输入有误')
二、异常
异常:就是在程序执行过程中有逻辑等的其他错位导致,使得程序终止运行
异常处理:在程序执行的过程中, 发现错误对其进行处理,让程序可以正常执行不为此错误而被迫停止运行
1、异常错误
1、语法错误:语法错误可以避免——SyntaxError
2、逻辑错误
# TypeError 类型错误,不同数据类型之间的无效操作
# NameError 变量名未定义
# IndexError 下标索引超出范围
2、异常处理
语法格式:
try:
代码块(感觉有问题的代码)
except 异常类型:
判断到上面的代码有异常之后执行的代码
else:
代码没有异常执行的代码
finally:
不管有没有异常都会执行的代码
在异常类型后面加上as 变量名 , 可以获取到这个异常的信息
Exception:可以捕获到所有的异常
try:
res = '阿宸是个大帅哥 , 靓仔一个 , 棒棒的 , 超厉害的'
print(res[30])
except IndexError as no:
print('夸了 , 但没有夸那么多')
print(no)
print('在座的各位也是厉害的')
try:
res = '阿宸是个大帅哥 , 靓仔一个 , 棒棒的 , 超厉害的'
print(res[50])
except Exception:
print('夸了 , 但没有夸那么多')
else:
print('夸得没毛病')
finally:
print('管你谁 , 我就是要在夸一下 , 阿宸nice')
print('在座的各位也是厉害的')
3、assert断言
发送AssertionError异常错误
assert 判断表达式 , 返回异常信息(当判断表达式为False是执行)
# 表达是bool类型可以进行使用
x = 100
y = 200
ac = '阿宸是个大帅哥'
# assert x > y ,'你的数学谁交的 , 体育老师都不背锅'
assert '丑' in ac ,'说谁丑呢 , 找打 , 回去笔记抄个一百遍'
assert '帅' in ac ,'说谁丑呢 , 找打 , 回去笔记抄个一百遍'
4、定义异常
raise Exception(返回的异常信息)
money = int(input('请输入金额:'))
if money < 550:
raise Exception(f'money不能小于550 , 当前money值为{money} , 交易失败 , 回去吧')
else:
print('交易成功 , 合作愉快 , 期待下期合作哦')