ToB企服应用市场:ToB评测及商务社交产业平台
标题: 【测试开辟】python系列教程:python反射 [打印本页]
作者: 钜形不锈钢水箱 时间: 2024-8-24 02:39
标题: 【测试开辟】python系列教程:python反射
这次我们分享python的反射
在java中大家都知道,java的反射的机制,其着实python中也是有反射机制的,我们看下怎样 来用?
一、什么是反射?
程序可以访问、检测和修改'本身状态'或者举动的一种能力。大白话:其实就是通过字符串操纵对象的数据和方法
二、反射的作用
正常使用对象中的方法是要通过变量名去调用的, 使用反射可以让用户,通过输入字符串,调用对象中的数据或者方法。
三、python反射的四个方法
hasattr() 判断对象是否含有字符串对应的数据或者功能
getattr() 根据字符串获取对应的变量名或者函数名
setattr() 根据字符串给对象设置数据 (名称空间的名字)
delattr() 根据字符串删除对象对应的数据 (名称空间中的名字)
四、代码演示
hasattr
结果:
getattr()
- class Dog():
- name='123'
- def printagename(self):
- print('111')
- # 1.获取类中的值
- print(getattr(Dog,'name'))
- # 2.获取类中的方法
- print(getattr(Dog,'printagename'))
- # 3.调用
- a=Dog()
- getattr(Dog,'printagename')(a)
- # 4.获取对象中的方法
- print(getattr(a,'name'))
复制代码 结果展示
setattr()
- class Dog():
- name='123'
- def printagename(self):
- print('111')
- # 1.获取类中的值
- print(getattr(Dog,'name'))
- #2.通过反射修改
- setattr(Dog,'name','addddd')
- #3.获取修改后结果
- print(getattr(Dog,'name'))
复制代码 结果展示:
delattr()
- class Dog():
- name='123'
- def printagename(self):
- print('111')
- # 1.获取类中的值
- print(getattr(Dog,'name'))
- #2.通过反射删除
- delattr(Dog,'name')
- #3.获取修改后结果
- print(getattr(Dog,'name'))
复制代码 结果展示
可以看到,在我们删除后,就没有这个属性或者方法了。
来看一个小案例
- 考虑有这么一个场景:需要根据用户输入url的不同,
- 调用不同的函数,实现不同的操作,
- 也就是一个WEB框架的url路由功能。
- 路由功能是web框架里的核心功能之一,例如Django的urls。
复制代码 看下怎样来实现
先来四个可以函数,来模仿不通的地址的文件
- def login():
- print("这是一个登陆页面!")
- def logout():
- print("这是一个退出页面!")
- def home():
- print("这是网站主页面!")
复制代码 来实现路由的分发
- import url
- def run():
- inp = input("请输入您想访问页面的url: ").strip()
- if inp == "login":
- url.login()
- elif inp == "logout":
- url.logout()
- elif inp == "home":
- url.home()
- else:
- print("404")
- if __name__ == '__main__':
- run()
复制代码 实行
这就实现了一个简单的url路由功能,根据不同的url,实行不同的函数,得到不同的页面。
然而,让我们思考一个题目,如果有成百上千个路径函数呢(这很常见)?难道在run模块里写上成百上千个elif?显然这是不可能的!那么怎么办?
可以通过反射来实现
- import url
- def run():
- inp = input("请输入您想访问页面的url:").strip()
- func = getattr(url, inp)
- func()
- if __name__ == '__main__':
- run()
复制代码 实行验证
存在的url
不存在的url
怎样改进呢,其实很简单,我们分享过hasattr可以判断,我们在实行前做个判断即可
访问存在的url
访问不存在的url
通过hasattr()的判断,可以防止非法输入导致的错误,并将其统一定位到错误页面。
末了: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果必要可以自行免费领取【包管100%免费】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也伴随上万个测试工程师们走过最困难的路程,盼望也能资助到你!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) |
Powered by Discuz! X3.4 |