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 09 Python
python3 发送任意文件邮件的实例
Jan 23 Python
Python实现全排列的打印
Aug 18 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
Python文件操作函数用法实例详解
Dec 24 Python
Python 中@property的用法详解
Jan 15 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
如何在pycharm中安装第三方包
Oct 27 Python
python模板入门教程之flask Jinja
Apr 11 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+Html+缓存
2006/11/25 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
简单谈谈Python流程控制语句
2016/12/04 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
NumPy中的维度Axis详解
2019/11/26 Python
Python datetime 如何处理时区信息
2020/09/02 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
医学生实习自我鉴定
2013/09/27 职场文书
广告学专业应届生求职信
2013/10/01 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
公司股东合作协议书
2014/09/14 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
长城导游词
2015/01/30 职场文书
2015年采购员工作总结
2015/04/27 职场文书
中秋节随笔
2015/08/15 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Python+Tkinter打造签名设计工具
2022/04/01 Python
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js