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 条件判断的缩写方法
Sep 06 Python
Python help()函数用法详解
Mar 11 Python
python执行使用shell命令方法分享
Nov 08 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
python实现取余操作的简单实例
Aug 16 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
python某漫画app逆向
Mar 31 Python
浅析python中特殊文件和特殊函数
Feb 24 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/06/18 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
Python实现的检测网站挂马程序
2014/11/30 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
python检测服务器端口代码实例
2019/08/31 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python数据分析:关键字提取方式
2020/02/24 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
个人担保书格式范文
2014/05/12 职场文书
党员群众路线承诺书
2014/05/20 职场文书
旅游活动总结
2014/08/27 职场文书
争做文明公民倡议书
2014/08/29 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
上下班时间调整通知
2015/04/23 职场文书
办公用品质量保证书
2015/05/11 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
讲解MySQL增删改操作
2022/05/06 MySQL