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 相关文章推荐
使用Python3 编写简单信用卡管理程序
Dec 21 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
python2 与 python3 实现共存的方法
Jul 12 Python
python实现Flappy Bird源码
Dec 24 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
python3射线法判断点是否在多边形内
Jun 28 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
Numpy一维线性插值函数的用法
Apr 22 Python
Python-for循环的内部机制
Jun 12 Python
Python实现批量自动整理文件
Mar 16 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 常用字符串函数总结
2008/03/15 PHP
mysql 性能的检查和优化方法
2009/06/21 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue中轮训器的使用
2019/01/27 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
详解Python中的日志模块logging
2015/06/19 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
《云房子》教学反思
2014/04/20 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
护士求职简历自我评价
2015/03/10 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书