反射说简单点 --> 就是利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员。

需求:由用户输入一个模块名,用户输入什么模块名,文件中就导入什么模块:

1:文件都在同一目录下的导入

在同一目录下建立两个文件,index.py , commons.py

commons.py文件内容如下:

def f1():
return "F1"
def f2():
return 'f2'

在index.py文件中书写代码:

m = input('input module : ')
module = __import__(m)#module相当于import modulename as f形式中的别名
print(module.f1())

使用 __import__('模块名')的方式导入模块!为什么要使用这种方式导入模块,而不使用 import modulename方式导入呢?因为用户输入进来的都是字符串,而import modulename方式,modulename不是一个字符串!

此时执行index.py文件,就能正常导入模块,接收f1函数中的返回值:

需求:上面已经实现用户输入模块名就导入哪个模块,现在要求由用户再输入函数名,然后文件中就执行该模块中的对应的函数

m = input('input module : ')#用户输入模块名
f = input('input func name : ')#用户输入函数名 module = __import__(m)#导入用户输入的模块
func = getattr(module,f)#调用用户输入的函数 print(func())

如果commons模块与index.py文件不在同一目录的导入:假如commons.py文件在lib/commons.py下

module = __import__('lib.'+m,fromlist=True)#导入用户输入的模块

附录:

getattr(object,name) :获取指定模块中的指定成员

hasattr(object,name):判断指定模块中是否存在指定成员

delattr(object,name):删除指定模块中的指定成员!不影响原文件,只是在内存中删除

setattr(object,name,value):给指定模块增加一个成员!不影响原文件,只是在内存中增加

Python高手之路【十】python基础之反射的更多相关文章

  1. JVM菜鸟进阶高手之路十(基础知识开场白)

    转载请注明原创出处,谢谢! 最近没有什么实战,准备把JVM知识梳理一遍,先以开发人员的交流来谈谈jvm这块的知识以及重要性,依稀记得2.3年前用solr的时候老是经常oom,提到oom大家应该都不陌生 ...

  2. Python高手之路 ------读书有感

    最近忙中偷闲把前些年买的<Python高手之路>翻了出来,大致看完了一遍,其中很多内容并不理解,究其原因应该是实践中的经验不足,而这对于现如今的我仍是难以克服的事情,对此也就只能说是看会了 ...

  3. 《Python高手之路 第3版》这不是一本常规意义上Python的入门书!!

    <Python高手之路 第3版>|免费下载地址 作者简介  · · · · · · Julien Danjou 具有12年从业经验的自由软件黑客.拥有多个开源社区的不同身份:Debian开 ...

  4. JVM菜鸟进阶高手之路十四:分析篇

    转载请注明原创出处,谢谢! 题目回顾 JVM菜鸟进阶高手之路十三,问题现象就是相同的代码,jvm参数不一样,表现的现象不一样. private static final int _1MB = 1024 ...

  5. python开发之路:python数据类型(老王版)

    python开发之路:python数据类型 你辞职当了某类似微博的社交网站的底层python开发主管,官还算高. 一次老板让你编写一个登陆的程序.咔嚓,编出来了.执行一看,我的妈,报错? 这次你又让媳 ...

  6. Python高手之路【七】python基础之模块

    本节大纲 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparse ...

  7. Python菜鸟之路:Python基础-模块

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,分组的规则就是把实现了某个 ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 我的Python成长之路---第六天---Python基础(18)---2016年2月20日(晴)

    os模块 提供对操作系统进行调用的接口 >>> import os >>> os.getcwd() # 获取当前工作目录,类似linux的pwd命令 '/data/ ...

  10. python学习之路-1 python简介及安装方法

    python简介 一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. 目前最新版本为3.5.1,发布于2015年12月07日 ...

随机推荐

  1. Vs2010中水晶报表引用及打包

    原文:Vs2010中水晶报表引用及打包 转自:http://yunhaifeiwu.iteye.com/blog/1172283 Vs2010中水晶报表引用 在sap官网中下载支持vs 2010中的水 ...

  2. knockout同时绑定多个实体demo

    1.我们会遇到一种情景:一个页面实现复杂的功能时,我们往往会使用部分页(.netmvc中的@renderaction,java中ajax请求jsp页面). 如果子页面也使用knockout绑定数据会不 ...

  3. linux 启动oracle报cannot restore segment prot after reloc: Permission denied

    error while loading shared libraries: $ORACLE_HOME/lib/libnnz10.so: cannot restore segment prot afte ...

  4. Smarty属性

    Attributes [属性] 大多数函数都带有自己的属性以便于明确说明或者修改他们的行为.  smarty函数的属性很像HTML中的属性.  静态数值不需要加引号,但是字符串建议使用引号.  如果用 ...

  5. windows下grunt安装提示不成功

    在电脑按了node.js之后,在cmd中 输入 npm install -g grunt-cli 注意啦 不是 npm install -g grunt-cli 中间多了一个空格就安装不成功了,这个空 ...

  6. Easyui布局

    Easyui入门视频教程 第03集---Easyui布局 Easyui入门视频教程 第03集---Easyui布局 目录 -----------------------   Easyui入门视频教程 ...

  7. D0

    刚到长乐就被机房里众大神的气场给压倒了 orz....... 然后默默的感觉到自己貌似已经有一个星期没有打题了...就各种忧伤.... 还是说一下今天的计划吧 嗯傍晚5.30-6.00 &&a ...

  8. Effective C++ 读书总结

    (中文第三版 侯捷 译) 这本书在C++领域也是大名鼎鼎,在微博看到有人说,如果以前学过C语言,那只需花一天时间把 Effective C++ 看一遍,然后再看 leveldb代码(http://t. ...

  9. Leetcode: 06/01

    今天完成了三道题目,总结一下: 1: Length of last word(细节实现题) 此题有一些细节需要注意(比如 “a_ _” 最后一个单词是a, 而不是遇到空格就直接算成没有),别的基本就是 ...

  10. JS获取当前日期时间并定时刷新

    JS获取当前日期时间 var date = new Date(); date.getYear(); //获取当前年份(2位) date.getFullYear(); //获取完整的年份(4位,2014 ...