内置函数补充 之 反射
2018-06-18 03:31:42来源:未知 阅读 ()
getattr 反射
为什么要有反射?
当在设计一个页面访问的时候,通过用户输入相应的url,进入相应的页面,在用户输入的url地址不存在的时候,返回404错误。
def run(): inp = input('请输入要访问的url:') if inp == 'login': commons.login() elif inp == 'logout': commons.logout() elif inp == 'home': commons.home() else: print('404') run()
def login(): print('炫酷登录页面') def logout(): print('炫酷退出页面') def home(): print('炫酷主页面')
但通过以上的形式进行编写,如果一旦需要增添更多的页面的时候,代码写入的工作量就变得巨大
getattr / hasattr
通过反射即可实现更高效的代码,也是基于反射实现类Web框架的路由系统,
getattr(commons,inp) 的含义就是让getattr自己去commons模块中寻找inp输入中对应的函数,即是login就对应login,是logout就应对logout。
import commons def run(): inp = input('请输入要访问的url:') #利用字符串的形式去对象(模块)中操作(寻找/检查)成员 if hasattr(commons,inp): #检查是否有相应的成员,如果有进行操作 func = getattr(commons,inp) #操作成员 func() else: print('404') run()
def login(): print('炫酷登录页面') def logout(): print('炫酷退出页面') def home(): print('炫酷主页面')
反射的4个内置函数分别为:
getattr、hasattr、setattr、delattr ,其作用为获取成员、检查成员、设置成员、删除成员。
__import__()
如果不同的def函数没有集中在同一个.py文件的模块中,而是根据所能提供的不同功能,散列的分布在众多的.py文件中的时候。
我们不可能去一个一个的import xxx对众多的模块进行一一导入,这个时候我们也可以对import的导入模块的操作进行反射
即以"字符串"的形式导入模块。
def run(): inp = input('请输入要访问的url:') m,f = inp.split('/') obj = __import__(m) if hasattr(obj,f): #检查是否有相应的成员,如果有进行操作 func = getattr(obj,f) #操作成员 func() else: print('404') run()
__import__()和各.py文件之间的关系图
如果其中一个.py文件在另一个文件下目录之下就要通过fromlist = True来找到该.py文件
def run(): inp = input('请输入要访问的url:') m,f = inp.split('/') obj = __import__("lib." + m, fromlist = True) #该模块在lib文件下路径之下的时候 if hasattr(obj,f): #检查是否有相应的成员,如果有进行操作 func = getattr(obj,f) #操作成员 func() else: print('404') run()
总结:
反射的实例:伪造Web框架的路由系统
反射:基于字符串的形式去对象(模块)中操作其成员。getattr、hasattr、setattr、delattr 。
扩展:导入模块
import xxx from xxx import ooo obj = __import__("xxx") obj = __import__("xxx.oo.xxx", fromlist=True)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- fetchone函数和fetchall函数返回值的区别 2019-08-13
- Python之装饰器笔记 2019-08-13
- Python学习日记(九) 装饰器函数 2019-08-13
- python之函数、面向对象 2019-08-13
- python3基础之“函数(2)” 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash