反射
来源:互联网 发布:常用生物数据分析软件 编辑:程序博客网 时间:2024/06/16 15:40
反射
正常导入模块是用import 模块 ;这样的句子导入的,如果需要按照用户输入的内容进行导入的话,就要用到反射:以字符串的形式去对象中(某个模块)操作其成员。
DD = __import__('模块')
- 以字符串的形式去某个模块中寻找东西:getattr
- 以字符串的形式去某个模块中判断东西是否存在:hasattr
- 以字符串的形式去某个模块中设置东西:setattr
- 以字符串的形式去莫莫格模块中删除东西:delattr
根据用户输入的内容导入模块
inp = input("请输入模块:")print(inp, type(inp)) #导入的类型是str类,str类只有通过__import__ 导入dd = __import__(inp)r = dd.f1() #模块中有个f1函数,执行f1函数(这个模块是自定义的)print(r)
根据用户输入的模块和模块内函数,找到模块和函数并执行,getattr
inp = input("请输入模块:")inp_func = input("请输入函数:")dd = __import__(inp) dd_func = getattr(dd, inp_func) #getattr,在某个模块内以字符串的形式查找指定函数,再把这个函数定义个变量result = dd_func() #dd_func 等于执行函数 commons.f?print(result)
在模块中创建函数和删除函数,这里进行的操作只在内存中进行,不写入磁盘
import commons #commons为自定义函数hn = input("请输入函数的名字:")if hasattr(commons, hn): print("存在")else: setattr(commons, hn, lambda : print("哈哈儿")) #这里用lambda表达式来创建函数 print("不在,创建完成") target_func = getattr(commons, hn, None) #getattr最后面的一个参数,如果找不到这个函数的时候返回None要不然会报错 target_func()dn = input("请输入删除的函数:")delattr(commons, dn)r = hasattr(commons, dn)print(r)
模拟网站判断URL
from lib import acccounturl = input("请输入url:")inp = url.split("/") [-1] #取分割后的最后一个元素if hasattr (acccount, inp): tar_func = getattr(acccount, inp) r = tar_func()else: print("404")
有的时候模块的路径不跟当前文件在同一个路径,就要用到下面这种格式来带着from 路径 import 模块格式
from 路径 import 模块__import__ ('路径.' + '模块', fromlist=True)
根据用户输入的模块和函数,来调用模块并查找函数执行
这个例子只是试验的例子,与实际环境不同
url = input("输入url:")target_module, target_func = url.split('/') #把输入的url分隔,一个代表模块,一个代表函数m = __import__ ("lib." + target_module, fromlist=True) #将模块路径组合起来,fromlist代表以from格式调用模块,如果不加调用不了if hasattr(m, target_func): target_func = getattr(m, target_func) r = target_func() print(r)else: print("404")
0 0
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- mac安装theano
- PyQt5:QRadioButton 单选框(23)
- struts2-国际化资源
- pl/sql存储过程的递归调用,树形数据的展示
- PyQt5:ToggleButton开关按钮(24)
- 反射
- 文件的上传、下载
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- PyQt5:QSlider滑块、QLabel标签(25)
- Leetcode 83. Remove Duplicates from Sorted List 移除重复 链表版 解题报告
- 七. ubuntu更改主机名
- 提交Eclipse代码到Github
- PyQt5:QProgressBar进度条(26)
- Android lint 定制规则