python_反射

来源:互联网 发布:办公软件图标 编辑:程序博客网 时间:2024/06/16 07:26

一、反射:

作用与内存不影响原文件

通过字符串的形式,导入模块

通过字符串德的形式,去模块中寻找指定函数 (getattr)

通过 字符串的形式去判断某个模块的东西(hasattr)

通过字符串的形式去某个模块创建东西(setattr)

通过字符串去某个模块删除东西(delattr)

__import__(str,fromlist = True):fromlist 默认 为Flase ,当想到入多级时候True

import  datetime#声明函数im = input("请输入导入的函数")#调用__import__  函数数将字符转换成对应的py文件#等价于 import datatime as dddd = __import__(im)print(dd.datetime.now())

f=getattr(object, name, default=None)

''''
default:当没有 函数的时候返回 Noneobject:导入的模块name:函数,根据字符中的名字寻找模块中函数f:指向函数是地址,调用f()'''
二、getattr

#应用:根据用户输入的内容,导入模块inp = input("请输入模块:")print(inp,type(inp))#dd = __import__(inp) # import 文件名 as ddinp_func = input("请输入要执行的函数")#getattr 用于以字符串的形式去某个模块中寻找函数target_func=getattr(dd,inp_func)#相当于import ti  ti.f()#ti.f()target_func()>>>请输入模块:titi <class 'str'>请输入要执行的函数f1

三、hasatter

import tidouble_func = hasattr(ti,"f")print(double_func)
>>> True  或者 Flase  看实际情况

四、setattr/delattr

import ti#z相当于属性/穿入lambda 表达式相当于传进函数double_func = setattr(ti,"z",lambda a:a+b)del_func = delattr(ti,"f")

五、根据反射理解web
#模块名/函数名url = input("请输入url")target_module,target_func = url.split("/")#login.文件名/target_module模块名/fromlist同意引入模块名m = __import__("login."+target_module,fromlist=True)#指向文件的对应方法if hasattr(m,target_func):    f= getattr(m,target_func)    f()else:    print("404")