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基础教程之udp端口扫描
Feb 10 Python
Python数组条件过滤filter函数使用示例
Jul 22 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
Python实现自动登录百度空间的方法
Jun 10 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
Django框架之路由用法
Jun 10 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实现弹出消息提示框的两种方法
2013/12/17 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php中define用法实例
2015/07/30 PHP
twig里使用js变量的方法
2016/02/05 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python实现FTP文件传输的实例
2019/07/07 Python
详解python中__name__的意义以及作用
2019/08/07 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
护士求职信
2014/07/05 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
茶花女读书笔记
2015/06/29 职场文书
导游词之青岛太清宫
2019/12/13 职场文书