• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
琴酒网络
博客园    首页    新随笔    联系   管理    订阅  订阅

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

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

 

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

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

 

posted @ 2017-01-09 10:57  琴酒网络  阅读(885)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3