Python高手之路【十】python基础之反射

2017-01-10 10:04:25来源:作者:李勇人点击

第七城市

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



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


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):给指定模块增加一个成员!不影响原文件,只是在内存中增加


内容来源:http://www.cnblogs.com/ginvip/p/6263028.html

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台