反射
反射:通过字符串的形式来操作对象属性。
1、对象反射
1、getattr 获取指定的对象属性
变量名 = getattr(对象 , '对象属性' , 设置默认值)
# 设置默认值:指当在对象中查找不到对应的对象顺序ing是返回的内容 , 如果没有设置默认是并且属性不存在就会报错。
2、setattr去对象中设置一个对象属性
setattr(对象,'对象属性' , 值)
3、hasattr判断对象是否有对应的对象属性
变量名 = hasattr(对象 , '对象属性')
# 返回bool类型
4、delattr删除指定对象的属性
delattr(对象,'对象属性')
class A:
def __init__(self , name , age):
self.name = name
self.age = age
def say_hi(self):
print(f'hi , {self.name}')
ddg = A('大大怪' , 24)
print(ddg.name)
ddg.say_hi()
# 变量名 = getattr(对象 , '对象属性')
nn = input('请输入要查看属性名:')
n = getattr(ddg, nn, '属性方法找不到')
print(n)
# setattr(对象,'对象属性' , 值)
setattr(ddg , 'name' , '小小怪')
setattr(ddg , 'height' , 1.89)
print(ddg.name)
print(ddg.__dict__)
# 变量名 = hasattr(对象 , '对象属性')
bol = hasattr(ddg , 'weight')
print(bol)
res = hasattr(ddg , 'height')
print(res)
# delattr(对象,'对象属性')
# delattr(ddg , 'say_hi') # 报错 , 不能删除方法
delattr(ddg , 'age')
print(ddg.__dict__)
实例:
class User:
def login(self):
print('这是微信登录页面')
def register(self):
print('这是一个微信注册')
def speak(self):
print('这是聊天页面')
# 未使用反射
# ddg = User()
# choose = input('请输入你要操作的功能:')
# if choose == 'login':
# ddg.login()
# elif choose == ' register':
# ddg.register()
# elif choose == 'speak':
# ddg.speak()
# else:
# print('输入有误')
# 使用反射
xxg = User()
choose = input('请输入你要操作的功能:')
if hasattr(xxg , choose):
fun = getattr(xxg , choose)
fun()
else:
print('没有这个功能')