python通过实例讲解反射机制


Posted in Python onOctober 17, 2019

一、反射机制简介:

  • 通过字符串的形式导入模块
  • 通过字符串的形式,去模块中寻找指定的函数,并执行
  • 规定用户输入格式 模块名/函数名 通过__import__的形式导入模块,并通过 hasattr和getattr 检查并获取函数返回值。

相关方法:

  • getattr:--根据字符串的形式去某个模块中寻找东西
  • hasattr:--根据字符串的形式去某个模块中判断东西是否存在
  • setattr:--根据字符串的形式去某个模块中设置东西
  • delattr:--根据字符串的形式去某个模块中删除东西

二、反射机制初识:

test.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def f1():
return '我是F1,我被调用了'

def f2():
return '我是F2,我被调用了'

def f3():
return '我是F3,我被调用了'

index.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
反射机制
1.根据字符串的形式导入模块。
2.根据字符串的形式去对象(某个模块)中操作其成员 
实现思路:规定用户输入格式 模块名/函数名 通过__import__的形式导入模块,并通过 hasattr和getattr 检查并获取函数返回值。
"""
#通过用户输入的形式, 导入模块
inp = input('请输入需要导入的模块名:')
#__import__用于以字符串的形式导入模块
dd = __import__(inp)
#在模块寻找函数并执行函数
inp_func = input('请输入需要执行的函数:')
#getattr()用于以字符串的形式去某个模块中寻找函数
tager_func = getattr(dd, inp_func)
#在获取到的函数名后加()表示执行函数
result = tager_func()
print(result)

代码执行结果:

请输入需要导入的模块名:test
请输入需要执行的函数:f2
我是F2,我被调用了

实例:基于反射模拟Web框架路由系统(一)

commons.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def login():
return 'login'

def logout():
return 'logout'

def nb():
return '很牛逼的网页'

refec_demo.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
基于反射模拟web框架路由系统
"""
from lib import commons
url = input('请输入模拟的url路径:')
if url.endswith('login'):
ret = commons.login()
print(ret)
elif url.endswith('logout'):
ret = commons.logout()
print(ret)
else:
print('404')

实例:基于反射模拟Web框架路由系统(二)

refec_demo1.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from lib import commons

inp = input('请输入模拟的url路径:')
url_inp = inp.split('/')[-1]
if hasattr(commons, url_inp):
ret = getattr(commons, url_inp)
result = ret()
print(result)
else:
print('404')

代码实现结果:

路径正确时结果:

python通过实例讲解反射机制

路径不正确时结果:

python通过实例讲解反射机制

实例:基于反射模拟Web框架路由系统(三)

manager.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def home():
return 'Home'

order.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def add_order():
return '添加订单'

refec_demo2.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#用户输入规则:模块名/函数名

url = input('请输入模块名/函数名:')
target_modul, target_func = url.split('/')
#__import__导入模块
mod = __import__('lib.' + target_modul, fromlist=True)
#hasattr()判断函数是否存在
if hasattr(mod, target_func):
ret = getattr(mod, target_func)
result = ret()
print(result)
else:
print('404')

当模块和函数都存在时,url路径调用结果:

python通过实例讲解反射机制

当模块和函数都不存在时,url路径调用结果:

python通过实例讲解反射机制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中apply函数的用法实例教程
Jul 31 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
《Python学习手册》学习总结
Jan 17 Python
在Pandas中处理NaN值的方法
Jun 25 Python
Python实现中值滤波去噪方式
Dec 18 Python
Python阶乘求和的代码详解
Feb 14 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python3 re返回形式总结
Nov 20 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python Django模型详解
Oct 05 Python
python集合常见运算案例解析
Oct 17 #Python
Pandas聚合运算和分组运算的实现示例
Oct 17 #Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 #Python
python numpy中cumsum的用法详解
Oct 17 #Python
python hashlib加密实现代码
Oct 17 #Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 #Python
python模块常用用法实例详解
Oct 17 #Python
You might like
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
JS实现self的resend
2010/07/22 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Python简单实现区域生长方式
2020/01/16 Python
Python创建自己的加密货币的示例
2021/03/01 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
幼儿园教育教学反思
2014/01/31 职场文书
中学生运动会入场词
2014/02/12 职场文书
技术总监管理职责范本
2014/03/06 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
试用期辞职信范文
2015/03/02 职场文书
检讨书格式
2015/05/07 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电