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学习数据结构实例代码
May 11 Python
Python中操作符重载用法分析
Apr 29 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
详解Python sys.argv使用方法
May 10 Python
python中的global关键字的使用方法
Aug 20 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
Django缓存Cache使用详解
Nov 30 Python
python中常用的数据结构介绍
Jan 12 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获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
繁简字转换功能
2006/07/19 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
JS实现放烟花效果
2020/03/10 Javascript
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
使用python绘制二维图形示例
2019/11/22 Python
为什么说python适合写爬虫
2020/06/11 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
税务专业毕业生自荐信
2013/11/10 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
关于 Python json中load和loads区别
2021/11/07 Python