一、反射:根据字符串的形式去对象(某个模块)中去操作成员
通过字符串的形式,导入模块
通过字符串的形式,去模块中寻找指定的函数,并执行 1.__import__:用于字符串的形似执行导入模块
  
inp=input("请输入模块名:")
#print(inp,type(inp)) #__import__用于字符串的形似执行导入模块
dd=__import__(inp)
2.getattr:用于字符串的形式去某个模块中寻找函数
 
imp=input("请输入执行的函数名称:")
#getattr 用于字符串的形式去某个模块中寻找函数
f=getattr(dd,imp,None)
#在获取到的函数名后加(),执行函数
#print(f,f())

3.
hasattr()根据字符串的形式去某个模块中判断东西是否存在
r=hasattr(dd,imp)
print(r)


4.setattr(obj,name,value):根据字符串的形式去某个模块中设置东西(创建于内存中)
setattr(dd,'age',18)
r=hasattr(dd,imp)
print(r)
setattr(dd,'age',lambda a:a+1)
r=hasattr(dd,'age')
print(r)


5.delattr()根据字符串的形式去某个模块中删除东西
delattr(dd,'age')
r=hasattr(dd,'age')
print(r)

6.导入其他包下的函数
#from lib.test import com
# print(com.f11())
z这种方式只能导入到lib
r=__import__('lib.test.com')
print(r)
<module 'lib' from 'F:\\test-py3\\Function\\fanshe\\lib\\__init__.py'>
故选择这种方式

r=__import__('lib.test.com',fromlist=True)
print(r.f11())
二、一个包下的一个函数文件
from lib import account

url=input("请输入url:")
uri=url.split('/')[-1] #分割url以/
#print(uri)
if hasattr(account,uri):
func=getattr(account,uri)
r=func()
print(r)
else:
print('404')
三、多个模块下的多个函数(即基于web框架的路由器)
#格式:模块名/函数
uri=input("请输入url:")
url_module,url_func=uri.split('/') m=__import__('lib.'+url_module,fromlist=True)
#print (m)
if hasattr(m,url_func):
r=getattr(m,url_func)
f=r()
print(f)
else:
print('404')
 

三十八、python中反射介绍的更多相关文章

  1. Deep learning:三十八(Stacked CNN简单介绍)

    http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html 前言: 本节主要是来简单介绍下stacked CNN(深度卷积网络 ...

  2. 学以致用三十二-----python中函数的括号使用

    一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...

  3. 三十八 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

  4. java 面向对象(三十八):反射(二) Class类的理解与获取Class的实例

    1.Class类的理解 1.类的加载过程:程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾).接着我们使用java.exe命令对某个字节码文件进行解释运行.相当于将某个 ...

  5. SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)

    0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...

  6. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  7. 孤荷凌寒自学python第三十天python的datetime.datetime模块

     孤荷凌寒自学python第三十天python的datetime.datetime模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.datetime模块包含了:datet ...

  8. NeHe OpenGL教程 第三十八课:资源文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

随机推荐

  1. java 导出自定义样式excel

    由于项目需要 要求导出一个这样的表格 然而 正常导出的表格都是这样婶儿地 这种格式网上demo有很多就不详细说了 ,主要说说上面三行是怎么画的. 第一行大标题,是9行合并成的一行,而且字体大小需要单独 ...

  2. 手把手带你了解sass

    sass的使用 减少重复的工作 1.变量的声明: 是以$开头给变量命名; $height-color: #F30 2.变量的使用范围: 变量可以在多个地方存在,不一定限制在代码块中.但是如果定义在了代 ...

  3. python cv2展示网络图片、图片编解码、及与base64转换

    从网络读取图像数据并展示 需要使用cv2.imdecode()函数,从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式:主要用于从网络传输数据中恢复出图像. # -*- coding: utf ...

  4. PyCharm专业版下载安装

    目录 1. 推荐阅读 2. PyCharm专业版 (目录) 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm安装.Python在 ...

  5. java 集合之HashMap、Hashtable、LinkedHashMap、TreeMap

    HashMap 实现了Map接口,线程不安全. 实现原理: HashMap由数组+链表组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的. 如果通过hash定位到数组位置没有链表, ...

  6. squid之------ACL控制

    一.ACL概念   Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等各 ...

  7. DevExpress v19.1新版亮点——WinForms篇(五)

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  8. 甘特图 dhtmlx 插件

    https://dhtmlx.com/docs/products/demoApps/advanced-gantt-chart/

  9. websocket和通信

    最近默默的在学websocket,推荐的当然是阮一峰的博客了,其中也学到了不少  可以去看看咯 http://www.ruanyifeng.com/blog/2017/05/websocket.htm ...

  10. C#.Net集成Bartender条码打印,VS调试运行可以打印,发布到IIS运行打印报错

    C#.Net集成Bartender条码打印,VS调试运行可以打印,发布到IIS运行打印报错 问题原因: 问题出现在iis账户权限. 解决方法: iis默认是用network service这个账户去执 ...