一、反射:根据字符串的形式去对象(某个模块)中去操作成员
通过字符串的形式,导入模块
通过字符串的形式,去模块中寻找指定的函数,并执行 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. QtSpim使用Tips

    QtSpim使用记录 垃圾QtSpim,输入中文会死机 MIPS的中文资料奇缺,如果有问题建议google参考英文资料,许多外国大学的网站上有对MIPS各方面的详细介绍 QtSpim是MIPS处理器的 ...

  2. 错误 “SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, ie浏览器兼容问题

    参考:https://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app- https://www.cnblogs.com/OpenCod ...

  3. Flask开发系列之快速入门

    Flask开发系列之快速入门 文档 一个最小的应用 调试模式 路由 变量规则 构造 URL HTTP 方法 静态文件 模板渲染 访问请求数据 环境局部变量 请求对象 文件上传 Cookies 重定向和 ...

  4. 3、sql 表的连接

    摘自: https://blog.csdn.net/holly2008/article/details/25704471 表连接分为:CROSS JOIN.INNERT JOIN.OUTER JOIN ...

  5. Java中遍历Set集合的方法

    对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = s ...

  6. auto_ptr为什么不能做为vector的元素

    昨天看effectve c++的时候,发现了auto_ptr这个东西.由于我待过的公司都是用的老版c++,代码里智能指针什么的完全没有出现过,都是直接操作的原始指针.虽说我很少出错,但是总归还是不太安 ...

  7. (转) weblogic 域,管理服务器,受管服务器,集群和机器的基本知识

    weblogic 域,管理服务器,受管服务器,集群和机器的基本知识 1.域(Domain) •它是什么? –是一个逻辑上管理的WebLogic Server组,这些组从管理上当作一个整体来操作 •域里 ...

  8. 洛谷P2401 不等数列 题解

    可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...

  9. ubuntu 配置smb后无法访问

    配置如下 [/gscloud] path = /gscloud browseable = yes writable = yes guest ok = yes read only = no create ...

  10. WinEdit编辑器中中文乱码

    这个问题困扰了我很久.我的电脑上装的CTEX的最新版本,原来我的系统是windows 7 64位系统.装好了CTEX之后,在里面可以直接输入中文,显示和编译生成的PDF文件都正常.但是后来系统崩溃了一 ...