1.什么是反射
反射就是通过字符串对对象中的成员,进行操作的方法。
2.实例(对类的对象的成员操作):
class student:
def __init__(self,name,age):
self.name = name
self.age = age
def show(self):
return '%s-----%s'%(self.name,self.age)
stu = student('小明',18)
stu_do = getattr(stu,'show') #执行类中的方法
print(stu_do())
print(hasattr(stu,'name')) #判断是否有当前字段
setattr(stu,'hobby','篮球') #在对象中封装一个新的数据,hobby = ‘篮球’
print(stu.hobby)
delattr(stu,'age') #删除对象中的age
print(stu.name)
print(stu.age)
四个方法:getattr(),hasattr(),setattr(),delattr()
补充:
反射同样适用于模块与模块直接,类与类之间。(一切事物都是对象)
2.反射实际应用举例:
class school:
def f1(self):
return '校园服务'
def f2(self):
return '网络服务'
def f3(self):
return '论坛'
stu = school()
while True:
select_num = input('请输入您想要查看的界面:') # 让用户自主选择查看的内容
# if num == 'f1': # 这是原本的写法,但是随着内容越来越多,那么这种写法,就十分鸡肋。
# stu.f1()
# elif num == 'f2':
# stu.f2()
# elif num == 'f3':
# stu.f3()
if hasattr(stu,select_num):
func = getattr(stu, select_num) # 利用getattr()方法轻松解决以上代码重复的问题
rerault = func()
print(rerault)
else:
print('404')
#输出:
请输入您想要查看的界面:f2
网络服务
请输入您想要查看的界面:f3
论坛
请输入您想要查看的界面:f4
404
提示:此类调用方法,同样适用于模块之间,灵活运用可以节省很多不必要代码