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抽象类的新写法
Jun 18 Python
让python在hadoop上跑起来
Jan 27 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
python批量制作雷达图的实现方法
Jul 26 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
余弦相似性计算及python代码实现过程解析
Sep 18 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
jupyter notebook参数化运行python方式
Apr 10 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
python 基于UDP协议套接字通信的实现
Jan 22 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实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
python中assert用法实例分析
2015/04/30 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python中提高pip install速度
2020/02/14 Python
详细分析Python垃圾回收机制
2020/07/01 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
辅导员评语
2014/05/04 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
公司委托书格式范文
2014/10/09 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
同乡会致辞
2015/07/30 职场文书
五一放假通知怎么写
2015/08/18 职场文书
部门主管竞聘书
2015/09/15 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript