反射:通过字符串的形式进行操作对象的属性方法
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(对象 , '对象属性' ,设置默认值) xy = Foo('星奕' , 24) n = getattr(xy , 'name') print(n) h = getattr(xy , 'say_hi') h() f = getattr(xy , 'height' , '没有你要看的') print(f) # 2、setattr 设置对象属性 # setattr(对象 , '对象属性' , 值) print(xy.age) setattr(xy , 'age' , 25) print(xy.age) # 3、hasattr 判断对象是否有对应的属性以及方法 # d = hasattr(对象 , '对象属性') d = hasattr(xy , 'name') print(d) a = hasattr(xy , 'height') print(a) # 4、delattr 删除对象的属性 delattr(xy , 'age') # print(ac.age)
2、反射的使用
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
xy = User()
# 没有使用对象反射的情况
choose = input('请输入你要操作的功能:')
if choose == 'login':
xy.login()
elif choose == 'register':
xy.register()
elif choose == 'speak':
xy.speak()
else:
print('输入有误')
使用反射
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
xy = User()
# 使用反射
choose = input('请输入你要操作的功能:')
if hasattr(xy , choose):
fun = getattr(xy , choose)
fun()
else:
print('输入有误')